当我需要提取它们之间的文本时,我得到了一个带有两个星号的未知文本
我已经尝试弄乱索引,但是没有成功。
让我说出我的意思
today is a *good day*
我需要一个字符串,上面写着“美好的一天”
答案 0 :(得分:0)
您也可以使用此正则表达式:
\*(.*?)\*
您可以使用此函数来调用正则表达式(感谢Swift extract regex matches):
func matches(for regex: String, in text: String) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex)
let results = regex.matches(in: text,
range: NSRange(text.startIndex..., in: text))
return results.map { text[$0] }
} catch let error {
print("invalid regex: \(error.localizedDescription)")
return []
}
}
然后致电:
let matched = matches(for: "\\*(.*?)\\*", in: "*good day*")
要删除星号,可以使用:
let matched = matches(for: regex, in: "*good day*").map({$0.dropFirst().dropLast()})
请注意,它将使用所有以星号开头和结尾的字符串,如果只需要第一个,则可以使用firstMatch
。
答案 1 :(得分:0)
您可以通过以下方式在 String 中获得第一个星号和最后一个星号之间的子字符串:
func substring(in str: String, between char: Character) -> String? {
guard var i = str.firstIndex(of: char),
let j = str.lastIndex(of: char),
i != j
else { return nil }
i = str.index(after: i)
return String(str[i..<j])
}
substring(in: "Today is a *good day*", between: "*")
答案 2 :(得分:0)
如果您知道字符串中有两个*,则可以
let middle = str.components(separatedBy: "*")[1]
但是这里根本没有错误处理,因此如果字符串内容不是您期望的那样,则很容易发生IndexOutOfRange。