第一次發佈,我潛伏了一會兒,對這裏的幫助社區感到非常興奮。Python,正則表達式匹配數字,x,xxx,xxx,但不是xx,xx,x,
因此,由鋁Sweigart
「自動無聊的東西」這樣做,需要我建立在標準的數字格式發現號的正則表達式的鍛鍊工作。三位數字,逗號,三位數字,逗號等...
所以希望匹配1,234和23,322和1,234,567和12,但不是1,23,1或1111或其他愚蠢的東西。
我有以下幾點。
import re
testStr = '1,234,343'
matches = []
numComma = re.compile(r'^(\d{1,3})*(,\d{3})*$')
for group in numComma.findall(str(testStr)):
Num = group
print(str(Num) + '-') #Printing here to test each loop
matches.append(str(Num[0]))
#if len(matches) > 0:
# print(''.join(matches))
,輸出這個....
( '1',」 343' ) -
我不知道爲什麼中間的」 234" 被跳過。我相信,正則表達式有什麼問題。只是似乎無法把我的頭圍繞在這一個。
任何幫助或解釋將不勝感激。
跟隨編輯。因此,在遵循我可以吸收的所有建議之後,我將它完美地用於多種輸入。
import re
testStr = '1,234,343'
numComma = re.compile(r'^(?:\d{1,3})(?:,\d{3})*$')
Num = numComma.findall(testStr)
print(Num)
給我....
[ '1234343']
太好了!但!什麼時候我的字符串輸入更改爲類似
「1234343和12345」
相同的代碼返回....
[]
哎呀...大聲笑,這是有趣的, 我必須承認。
因此,練習的目的是能夠最終掃描一段文本並挑選出這種格式的所有數字。任何見解?我認爲這將增加一個額外的元組,而不是返回一個空的...
跟進編輯:
所以,一天後(一直忙於3個女兒和蜂蜜待辦事項列表),我已經終於能夠坐下來檢查我收到的所有幫助。這是我想出來的,它看起來工作得很好。包括評論爲我自己的個人理解。再次感謝Blckknght,Saleem,mhawke和BHustus。
我的最終代碼:
import re
testStr = '12,454 So hopefully will match 1,234 and 23,322 and 1,234,567 and 12 but not 1,23,1 or ,,1111, or anything else silly.'
numComma = re.compile(r'''
(?:(?<=^)|(?<=\s)) # Looks behind the Match for start of line and whitespace
((?:\d{1,3}) # Matches on groups of 1-3 numbers.
(?:,\d{3})*) # Matches on groups of 3 numbers preceded by a comma
(?=\s|$)''', re.VERBOSE) # Looks ahead of match for end of line and whitespace
Num = numComma.findall(testStr)
print(Num)
將返回:
['12,454' , '1,234','23,322' , '1,234,567', '12']
再次感謝!我在這裏有這樣一個積極的第一次發佈經驗,令人驚歎。=)
你爲什麼使用findall? – Alex
這不是問題,但你的正則表達式是錯誤的。第一個'*'是一個錯誤,它允許模式匹配非標準格式的東西:例如''1234''和'',123''。 –
我使用的是findall,因爲我是一個完全徹底的新手,摸索着他的方式:)我會閱讀不同的方法,並遵循這裏流動的建議。 –