2011-09-29 91 views
1

我需要一個正則表達式,它會找到一個不在括號內的數字。 例ABCD 1(35)(DF)正則表達式數字搜索

它只會看到1

這是非常複雜的?我試過了,沒有運氣。 感謝您的幫助

+2

你使用什麼編程語言?他們都使用正則表達式有點不同。 – Chriszuma

+3

發佈您嘗試過的內容,我們將進行修改。 –

+0

它應該是Perl特定的。據我使用的編輯。我會嘗試找到我使用的舊示例併發布。 – jdross

回答

2

這是很辛苦,但這樣的事情可能會做的事:

^(?:\()(\d+)(?:[^)])|(?:[^(0-9]|^)(\d+)(?:[^)0-9]|^)|(?:[^(])(\d+)(?:\))$ 

的問題是要匹配(123123),也不要爲非括號字符1之間的數字2字符串123匹配和3。也可能有一些邊緣情況下字符串的開始和結束。

我的建議是不使用正則表達式。也許是一個匹配數字的正則表達式,然後使用捕獲信息來檢查周圍的字符是不是括號。

2

正則表達式是:

^[a-z]+ ([0-9]+) \([0-9]+\) \([a-z]+\)$ 

結果是正則表達式的所述第一(只)匹配組。

也許你想刪除^$如果正則表達式不應該匹配只有它是整個單一行的內容。您也可以使用[a-zA-Z][[:alpha:]]。這取決於您使用的正則表達式引擎,當然還有您想要匹配的內容。

示例Perl代碼:

if (m/^[a-z]+ ([0-9]+) \([0-9]+\) \([a-z]+\)$/) { 
    print("$1\n"); 
} 

請注意,您的問題包含沒有足夠的信息來做出一個很好的答案可能(你沒有說你的表達式的一般格式事情,例如,如果你想匹配整數或浮點數)

0

有關更多信息,請參閱Regular Expression Library

此網站可能會幫助你很多。

+0

謝謝給-1不滿意。 –

+2

東南是一個Q/A網站。這不是Q /「將某個其他網站的鏈接,而不是一個A」網站。此外,您提供的鏈接不回答他的問題,即「我如何匹配不包含圓括號的數字?」它只給出203個正則表達式,恰好匹配其中某個數字。他應該通過他們所有,並發現那裏可能沒有答案? – CanSpice

1

如何

/(?:^|[^\d(])(\d+)(?:[^\d)]|$)/ 

?這個數字字符串(\d+)是

  • 由字符串的開頭,或不是一個數字或一個開括號的字符之前((?:^|[^\d(])

  • 由最終成功匹配字符串的,或由一個字符不是數字或右括號((?:[^\d)]|$)

3

一個簡單的解決方案是首先去除不需要的值:

my $string = "abcd 12 (35) (df) 2311,22"; 
$string =~ s/\(\d+\)//g;   # remove numbers within parens 
my @numbers = $string =~ /\d+/g; # extract the numbers