正则表达式:在括号之间找到一个数字

Regex : Find a number between parentheses

提问人:jonlabr 提问时间:12/11/2012 最后编辑:Chris Seymourjonlabr 更新时间:12/11/2012 访问量:84970

问:

我需要一个正则表达式,在下面找到粗体数字:

20 (L.B.D.D. hello 312312) 土豆 1651 (98)

20 (L.B.D.D. 你好312312兔子) 土豆 1651 (98)

20 (312312) 马铃薯 1651 (98)

((\d+)) 求出数字 98

当括号中有其他字符时,我不知道该怎么办

正则表达式

评论

0赞 Ian 12/11/2012
会起作用吗?不过,我相信有更好的方法可以做到这一点。它匹配一系列数字,这些数字在其之前或之后具有任意数量的非数字字符,所有字符都在括号内。我认为。。。(\([^0-9]*\d+[^0-9]*\))
2赞 woliveirajr 12/11/2012
你能发布你到目前为止尝试过的东西吗?我认为可以先尝试匹配括号内的所有内容,然后只匹配数字......
0赞 NeilMonday 12/11/2012
所以你只想要括号中的第一个数字而忽略数字 98?像这样的东西呢: 20 (L.B.D.D. hello 312312 bunny 12345 ) 土豆 1651 (98) 它应该只返回312312吗?
0赞 jonlabr 12/11/2012
@NeilMonday 312312或 12345 我不在乎。通常只有 1 个数字必须在括号之间
0赞 hiFI 9/7/2023
我认为您可以在这里使用正则表达式。您可能需要重建它,但请检查:LookaheadLookbehind[\d,.]+(?=\))

答:

3赞 Sam I am says Reinstate Monica 12/11/2012 #1

以下正则表达式应该可以做到这一点

@"\([^\d]*(\d+)[^\d]*\)"

括号表示捕获组,are 转义括号表示输入字符串中的实际括号。\(

注意:根据你实现正则表达式的语言,你可能不得不转义你的转义字符,所以要小心。\

不过我会小心这一点,正则表达式的教科书限制之一是它无法正确识别带括号的文本。

78赞 Chris Seymour 12/11/2012 #2

这仅匹配第一个捕获组中的312312

^.*?\([^\d]*(\d+)[^\d]*\).*$

重新解释:

^        # Match the start of the line
.*?      # Non-greedy match anything
\(       # Upto the first opening bracket (escaped)
[^\d]*   # Match anything not a digit (zero or more)
(\d+)    # Match a digit string (one or more)
[^\d]*   # Match anything not a digit (zero or more)
\)       # Match closing bracket
.*       # Match the rest of the line
$        # Match the end of the line

请看这里

评论

0赞 Sam I am says Reinstate Monica 12/11/2012
包括 和根本不包括它们有什么区别?^.*.*$
0赞 Chris Seymour 12/11/2012
区别在于你匹配了多少线,你根本不需要它们会这样做,但我喜欢彻底@sampson-chen,我一点也不知道,但那是我最喜欢的演示网站。几天前我想出了这个词,现在它进入了每个答案!\(.*?(\d+).*\)rubyregexregex