【问题标题】:Finding substrings wrapped by special characters in Swift在 Swift 中查找由特殊字符包裹的子字符串
【发布时间】:2018-11-07 09:36:38
【问题描述】:

我有这个字符串:

let string = "Users: [Ricky], [Bob], [Jane]"

我正在尝试用括号括起来的单词创建一个字符串 Array(例如["Ricky","Bob","Jane"])。

问题:如何对结果进行子串化和迭代?

正则表达式是要走的路吗?

let string = "Users: [Ricky], [Bob], [Jane]"
let pattern = "/[(.*?)]/"
let regex = try! NSRegularExpression(pattern: pattern)
let result = regex.matches(in:string, range:NSMakeRange(0, string.utf8.count))

【问题讨论】:

  • 试试let pattern = "(?<=\\[).*?(?=\\])"
  • 试试let pattern = "\[(.*?)\]"NSRange 也计入 UTF-16 代码单元,所以 NSMakeRange(0, string.utf16.count)
  • 使用我的正则表达式和来自here的代码。
  • 应该注意的是,副本只有两个(低票)答案适用于这个问题,而且它们都不能帮助这个问题的 OP 确定正确的正则表达式需要是什么。
  • @rmaddy,MartinR 的回答提供了除模式外所需的一切。我重新打开它是因为您的模式确实有效,您的所有代码也是如此。

标签: arrays swift regex string swift3


【解决方案1】:

您需要以下模式:

let pattern = "\\[([^]]*)\\]"

\\[ - 文字 [

[^]]* - 除了]之外的任意数量的字符

\\] - 文字 ]

( ) 仅在您需要引用方括号内的文本时才需要。

这是完整的工作代码:

let string = "Users: [Ricky], [Bob], [Jane]"
let pattern = "\\[([^]]*)\\]"
let regex = try! NSRegularExpression(pattern: pattern)
let result = regex.matches(in:string, range:NSMakeRange(0, string.utf8.count))
let names = result.map { (string as NSString).substring(with: $0.range(at: 1)) }
print(names)

输出:

[“瑞奇”、“鲍勃”、“简”]

【讨论】:

    猜你喜欢
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-16
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多