您好我想在()之间提取文本。
例如:
(some text) some other text -> some text
(some) some other text -> some
(12345) some other text -> 12345
括号内字符串的最大长度应为10个字符。
(TooLongStri) -> nothing matched because 11 characters
我目前的情况是:
let regex = try! NSRegularExpression(pattern: "\\(\\w+\\)", options: [])
regex.enumerateMatchesInString(text, options: [], range: NSMakeRange(0, (text as NSString).length))
{
(result, _, _) in
let match = (text as NSString).substringWithRange(result!.range)
if (match.characters.count <= 10)
{
print(match)
}
}
效果很好,但匹配是:
(some text) some other text -> (some text)
(some) some other text -> (some)
(12345) some other text -> (12345)
且不匹配&lt; = 10因为()也被计算在内。
如何更改上面的代码来解决这个问题?我还希望通过扩展正则表达式来保留长度信息来删除if (match.characters.count <= 10)
。
答案 0 :(得分:4)
您可以使用
"(?<=\\()[^()]{1,10}(?=\\))"
请参阅regex demo
模式:
(?<=\\()
- 在当前位置之前声明存在(
并且如果没有则失败则[^()]{1,10}
- 匹配(
和)
以外的1到10个字符(如果您只需要匹配字母数字/下划线字符,请将[^()]
替换为\w
)(?=\\))
- 检查当前位置后是否有文字)
,如果没有,则会失败。如果您可以调整代码以获取范围1(捕获组)的值,则可以使用更简单的正则表达式:
"\\(([^()]{1,10})\\)"
请参阅regex demo。您需要的值在Capture group 1中。
答案 1 :(得分:2)
这将有效
\((?=.{0,10}\)).+?\)
<强> Regex Demo 强>
这也可行
\((?=.{0,10}\))([^)]+)\)
<强> Regex Demo 强>
正则表达式细分
\( #Match the bracket literally
(?=.{0,10}\)) #Lookahead to check there are between 0 to 10 characters till we encounter another )
([^)]+) #Match anything except )
\) #Match ) literally