我正在尝试编写一个正则表达式来获取括号之间的值。我希望没有括号的值。例如,给定:
value = "John sinu.s(14)"
我希望得到14
。
我尝试了以下内容:
value[/\(.*?\)/]
但它会给出结果(14)
。请帮帮我。
答案 0 :(得分:3)
您可以使用
执行此操作value[/\((.*?)\)/, 1]
或
value[/\(([^()]*)\)/, 1]
使用capturing group和第二个参数仅提取组值。
请注意,\((.*?)\)
也将匹配包含(
字符的子字符串,第二个选项仅匹配不包含(
和{{1}的括号之间的子字符串因为)
是negated character class,它匹配除[^()]
和(
之外的任何字符。
请参阅Ruby demo online。
来自Ruby docs:
)
如果提供了str[regexp, capture] → new_str or nil
,则返回字符串的匹配部分。如果捕获遵循正则表达式(可能是捕获组索引或名称),则遵循正则表达式,而Regexp
的组件将返回。
如果您需要提取多个匹配项,请使用MatchData
:
String#scan
答案 1 :(得分:2)
另一种选择是使用像这样的非捕捉环境
value[/(?<=\().*(?=\))/]
(?<=\()
- 正面看后面确保有(
但不要抓住它
(?=\))
- 积极向前看确保正则表达式以)
结尾,但不要抓住它
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以使用
/(?<=\()[^\)]+/g
选择不带括号的括号内的字符串
只有你需要的是&#34;积极向前看&#34;特征
关注this link,了解有关特殊群组中positive lookahead
的更多信息。
我不知道它是否支持ruby
答案 4 :(得分:0)
您是希望在括号之间提取字符串还是使用正则表达式执行此操作?你在问题中指定后者,但可以想象你的问题实际上是前者,你假设必须使用正则表达式。
如果你只是想要这个值,而不是对用于获取它的方法有任何限制,那么你可以使用String#index和String#rindex完成这项工作。
s = "John sinu.s(14)"
s[s.index('(')+1 .. s.rindex(')')-1]
#=> "14"