【问题标题】:regex to get "words" delimited by space(s)?正则表达式获取由空格分隔的“单词”?
【发布时间】:2016-09-15 17:33:40
【问题描述】:

什么是正则表达式(在 IOS 中使用,“NSRegularExpression”)从由空格分隔的字符串中获取“单词”,即可以是“”、“”或“”等作为分隔符。

因此:

"26:43:33 S     153:02:51   E"

愿意:

1-"26:43:33"
2-"S"
3-"153:02:51"
4-"E"

【问题讨论】:

  • 为什么要使用正则表达式?只需将字符串拆分为空格即可。

标签: ios regex swift nsregularexpression


【解决方案1】:

作为正则表达式的替代方法,我建议在您的字符串上使用split 方法。

let string = "26:43:33 S     153:02:51   E"
let words = string.characters.split { $0 == " " }.map { String($0) }

因为在 characters 属性上调用split 会返回一个Character 类型的数组,所以我们需要使用map 方法将它们转换回字符串。 map 将对集合的每个元素执行闭包。在这种情况下,我们只是使用它将每个元素转换为 String

【讨论】:

  • 我完全同意。 OP 的特定问题中的用例似乎不必要地使用正则表达式。我的回答只是为了说明如果您使用的是正则表达式,您会怎么做;在更复杂的情况下,我想它可能有用。
  • 多个空格不影响这个吗?
  • 不,它们不会产生影响。
【解决方案2】:

因此:

"26:43:33 S     153:02:51   E"

愿意:

1-"26:43:33"
2-"S"
3-"153:02:51"
4-"E"

因此,如果您要为此使用正则表达式,您需要查找所有连续的非空格部分。像这样:

let s = "26:43:33 S     153:02:51   E" as NSString
let pattern = "[^ ]+"
let reg = try! NSRegularExpression(pattern: pattern, options: [])
let matches = reg.matchesInString(s as String, options: [], range: NSMakeRange(0, s.length))
let result = matches.map {s.substringWithRange($0.range)}
// result is: ["26:43:33", "S", "153:02:51", "E"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2019-06-21
    • 1970-01-01
    • 2016-08-13
    • 2011-05-21
    • 2021-06-14
    • 2016-01-17
    相关资源
    最近更新 更多