我收到类似“hello @[dbe9234d-9e59-94b01-42342c9sd](user_name) how are you?”这样的字符串。我想使用正则表达式来提取正则表达式的“user_name”部分。我正在使用以下正则表达式,它返回整个表达式(我只需要用户名)部分。有什么想法吗?
let source = "hello @[dbe9234d-9e59-94b01-42342c9sd](user_name) how are you?"
typePattern = "@\\[[a-z0-9-\\-]+\\]\\((\\w+)\\)"
if let typeRange = source.range(of: typePattern,
options: .regularExpression) {
print("First type: \(source[typeRange])")
// First type: @[dbe9234d-9e59-94b01-42342c9sd](user_name)
}
最佳答案
使用您当前的正则表达式 @\[[a-z0-9-\-]+\]\((\w+)\)
用户名在第一个捕获组中 (\\w+)
.
我认为您可以将字符类更新为 [a-z0-9-]
) 使用单个连字符。
如果您不想使用捕获组并且您的正则表达式引擎支持后视 (?<=
那么你可以匹配:
typePattern = "(?<=]\\()[^)]+(?=\\))"
这断言左侧是一个右括号和一个左括号 (?<=]\()
然后使用否定字符类 [^)]+
不匹配左括号并使用正 lookahead断言后面是一个 )
关于 swift 正则表达式配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51047534/