正则表达式代雨燕[复制]

问题描述 投票:-4回答:1

这个问题已经在这里有一个答案:

我有开始和以“_H”结尾的句子。我想产生一个正则表达式可以赶上这种情况下多次出现在一个完整的字符串。

我已经产生了正则表达式看起来像这样 “_H [A-ZA-Z0-9] ._ H”。我想添加一个“全局标志”像在JavaScript,但没能找到任何解决它。

Input String: "_h Hello _h _h World _h"
Current output: Hello World

Expected output: [Hello, World]
swift regex
1个回答
0
投票

你可以这样做:

let str = "_h Hello _h _h World _h"

let range =  NSRange(str.startIndex..., in: str)

let regex = try! NSRegularExpression(pattern: "(?<=_h).+?(?=_h)")

let matches = regex.matches(in: str, range: range)

let results: [String] = matches.compactMap { match in
    let subStr = String(str[Range(match.range, in: str)!]).trimmingCharacters(in: .whitespacesAndNewlines)
    return subStr.isEmpty ? nil : subStr
}

print(results)  //["Hello", "World"]

这里是正则解释说:

  • (?<=_h):用于_h正回顾后字面上(区分大小写);
  • .+?:匹配任何字符(除了行终止),1和无限次之间,如几次尽可能,扩大视需要;
  • (?=_h):对于_h正向前查找字面上(区分大小写)。

N.B:强制展开建造时是subStr安全。

© www.soinside.com 2019 - 2024. All rights reserved.