如何获得星号之间的字符范围?

时间:2019-03-31 13:22:14

标签: ios swift

当我需要提取它们之间的文本时,我得到了一个带有两个星号的未知文本

我已经尝试弄乱索引,但是没有成功。

让我说出我的意思

today is a *good day*

我需要一个字符串,上面写着“美好的一天”

3 个答案:

答案 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。