【问题标题】:Regular Expression generation in Swift [duplicate]Swift 中的正则表达式生成
【发布时间】:2019-06-27 07:14:11
【问题描述】:

我有一个以“_h”开头和结尾的句子。我想生成一个正则表达式,它可以在一个完整的字符串中捕获这种情况的多次出现。

我生成了一个类似于“_h.[a-zA-Z0-9]._h”的正则表达式。我想在 JavaScript 中添加一个“全局标志”,但找不到任何解决方案。

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

Expected output: [Hello, World]

【问题讨论】:

  • 到目前为止你尝试过什么?您能否分享一些您的尝试,以帮助我们更好地了解您面临的问题?
  • 使用捕获组_h\s*([a-zA-Z0-9]+)\s*_h 或使用环视(?<=_h\s)[a-zA-Z0-9]+(?= _h) 尝试这样的操作

标签: swift regex


【解决方案1】:

你可以这样做:

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"]

这里是解释的正则表达式:

  • (?&lt;=_h) :对 _h 字面意思的正面回溯(区分大小写);
  • .+? :匹配任何字符(行终止符除外),在 1 到无限次之间,尽可能少,根据需要扩展;
  • (?=_h) :正向预测 _h 字面意思(区分大小写)。

注意:构造 subStr 时强制展开是安全的。

【讨论】:

    猜你喜欢
    • 2014-09-24
    • 2021-04-21
    • 1970-01-01
    • 2022-01-14
    • 2016-08-19
    • 2011-08-17
    • 2015-05-09
    • 2019-07-15
    • 1970-01-01
    相关资源
    最近更新 更多