2010-11-15 144 views
10

有人可以帮我建立这个正则表达式,请...正则表达式从字符串中提取号码

鉴于以下字符串...

  • “四月(123个更少的部件456个链轮)”
  • “五月(789个部件少012链轮)”

我需要一个正则表达式,从文本中提取的两个数字。月份名称会有所不同。括号中的“小部件少”和“链轮”文本预计不会在字符串之间发生变化,但是如果能够改变这些文本,它将非常有用。

在此先感谢。

回答

27

,如果你肯定知道,有只将是2个地方,你必须在你的字符串的数字的列表,这是你要拉的唯一的事情出,那么你应该能够简单地使用

\d+ 
+0

您击败了我!上面的正则表达式,当全局应用于整个字符串时(这是依赖于实现的,所以OP必须向我们提示语言),将提取数字并忽略其余部分。 – 2010-11-15 18:06:35

+1

例如,在ruby中它会是'matches = string.scan(/ \ d + /)' – 2010-11-15 18:45:25

+0

我很抱歉,我正在使用.NET实现。 – 2010-11-15 19:16:10

23
^\s*(\w+)\s*\(\s*(\d+)\D+(\d+)\D+\)\s*$ 

应该工作。比赛结束后,反向引用1将包含月份,反向引用2将包含第一个数字,反向引用3将包含第二个数字。

说明:

^  # start of string 
\s* # optional whitespace 
(\w+) # one or more alphanumeric characters, capture the match 
\s* # optional whitespace 
\( # a (
\s* # optional whitespace 
(\d+) # a number, capture the match 
\D+ # one or more non-digits 
(\d+) # a number, capture the match 
\D+ # one or more non-digits 
\) # a) 
\s* # optional whitespace 
$  # end of string 
+2

+1的解释,但我必须给西雅图伦纳德正确的答案,因为它是如此简单。 – 2010-11-16 15:49:47

+0

您解决方案的好解释 – itsmatt 2014-03-21 12:38:47