3桁ごとにコンマで数字を照合する正規表現をどのように記述しますか?それは、 '42'、 '1,234'、および '6,368,745'と一致する必要があります。3桁ごとにコンマで数字を照合する正規表現
'12,34,567 '(コンマの間に2桁しかない)、' 1234 '(コンマがない)。
私はこの質問が以前に尋ねられ、答えられていることを知っていますが、正規表現に渡された文字列がそれらの数字の1つであったソリューションのためだけでした。正規表現に文字列 '42 1,234 6,368,745 12,34,567 1234'が渡された場合、それを行う最良の方法は何ですか?
は、私が最初の文字列を分割して、以下のようにそれをループでそれを行うために管理:そのコードを書くのより効率的な方法があるかどう
regexsplit = re.compile(r'^\d{1,3}(,\d{3})*$')
splitstring = string.split()
matches = []
for num in splitstring:
if regexsplit.search(num) is not None:
matches.append(regexsplit.search(num).group())
print matches
まず、私は思ったんだけど。第2に、文字列を分割せずに.findall()メソッドを使用する方法があるのだろうかと思います。しかし、私は明らかにまだ12「」、'34、567' 取得しています
regexnosplit = re.compile(r'(\d{1,3}(,\d{3})*)')
matches2 = []
for groups in regexnosplit.findall(string):
print groups[0]
:私はあなたがもはや始まりと終わりを固定する^と$を使用することはできないと思いますので、私がやった知っています、 '123'、 '4'が返されたので、より堅牢な正規表現を渡す必要があると推測していますが、解決策を見つけることができません。私は、不要なパターンを見つけようと、このようにそれを行うだろう
を説明 - ワード境界に見て否定的な先読み。 – jonrsharpe