2016-05-10 38 views
2

我正在運行Python 2.7,我目前在RE library上遇到了一些問題。 舉一個簡單的例子,在一個人的書面文件試圖數字時,我寫了這個正則表達式:這個數字匹配正則表達式不起作用嗎?

import re 
number = r'^[(]?([-]?([ ]?\d[ ]?)+)|([-]?([ ]?\d[ ]?)+[.,]([ ]?\d[ ]?)*)[)]?$' 

這應該與昏迷,點和空格相匹配的數字,因爲人們並不總是格式化好,並且有或沒有-,()

即使他們沒有優化,我期望下面的表達式能夠工作,但他們顯然不像我們在截圖中看到的那樣。

ex1 = r'^[(]?([-]?([ ]?\d[ ]?)+)|([-]?([ ]?\d[ ]?)+[.,]([ ]?\d[ ]?)*)[)]?$' 
ex2 = r'^(\()?(-)?(?\d ?)*[.,]?(?\d ?)*(\))?$' 
ex3 = r'^[(]?(-)?(?\d ?)*[.,]?(?\d ?)*[)]?$' 

> Screenshot to output <

輸入:

import re 

print "1st example :" 
number = r'^[(]?([-]?([ ]?\d[ ]?)+)|([-]?([ ]?\d[ ]?)+[.,]([ ]?\d[ ]?)*)[)]?$' 
print re.match(number, "16 juillet 1993") 

print "\n2nd example :" 
number = r'^(\()?(-)?(?\d ?)*[.,]?(?\d ?)*(\))?$' 
print re.match(number, "16 juillet 1993") 
print re.match(number, "161993") 
print re.match(number, "-1619,93") 
print re.match(number, "-(9 9 . 3)") 

print "\n3rd example :" 
number = r'^[(]?(-)?(?\d ?)*[.,]?(?\d ?)*[)]?$' 
print re.match(number, "-(9 9 . 3)") 

輸出繼電器:

1st example : 
<_sre.SRE_Match object at 0x103da5480> 

2nd example : 
None 
<_sre.SRE_Match object at 0x103da5480> 
<_sre.SRE_Match object at 0x103da5480> 
None 

3rd example : 
None 
+0

請將樣本數據作爲文本發佈。 –

+0

我預計它會爲''1993年16月16日''輸出'None',併爲所有其他人匹配。在我的正則表達式的開始和結尾使用'^'和'$','re.match'似乎是我需要使用的。你有什麼建議? – Thrastylon

+0

我會張貼這個'^(?:[] * [(])?(?:[] * [ - ])?(?:(?:[] * \ d)+(?:[] * [。 ,](?:[] * \ d [] *)*)?| [] * [。,](?:[] * \ d)+)(?:[] * [)]?$'if括號外沒有'--'。 – sln

回答

0

嘗試:number=r'^-?\(?(?\d ?)+[.,]?(?\d ?)*\)?$' 這裏,-超出()側。 如果你想匹配-()內,請使用: number=r'^\(?-?(?\d ?)+[.,]?(?\d ?)*\)?$'

如果你想匹配括號中的字符串( ),你應該\逃脫它。