2010-11-15 145 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