如何用正则表达式提取括号内不含括号的内容
提取括号内不含括号的内容(Ruby正则方案)
嘿,我懂你的问题啦——你现在用的正则把括号也一起匹配出来了,咱们调整下就能拿到纯括号里的内容~
在Ruby里有两种常用的方法可以实现:
方法1:使用捕获组
你可以把括号内的部分用捕获组包起来,然后指定提取捕获组的内容:
value = "John sinu.s(14)" result = value[/\((.*?)\)/, 1] # 结果是 "14"
解释下这个正则:
\(匹配左括号(转义是因为括号在正则里是特殊字符)(.*?)是捕获组,非贪婪匹配括号内的所有内容(非贪婪避免匹配到多个括号的情况)\)匹配右括号- 第二个参数
1告诉Ruby,返回第一个捕获组的内容,也就是括号里的部分
方法2:使用正向断言(零宽匹配)
如果你不想用捕获组,也可以用正向预查和反向预查来精准定位括号之间的内容:
value = "John sinu.s(14)" result = value[/(?<=\().*?(?=\))/] # 结果也是 "14"
这里的断言是零宽的,不会被计入匹配结果:
(?<=\()是反向正向断言,确保当前位置的前面是左括号(?=\))是正向断言,确保当前位置的后面是右括号.*?就只匹配括号之间的内容啦
额外小技巧:匹配多个括号内容
如果你的字符串里有多个括号,比如 value = "Alice(25) Bob(30)",想要提取所有括号内的内容,可以用scan方法:
values = value.scan(/(?<=\().*?(?=\))/) # 结果是 ["25", "30"]
内容的提问来源于stack exchange,提问作者ruby.r
相关产品推荐
相关产品推荐

