1

私は文字列を持っているかもしれません:

"Foo Bar, FooTown, $100,00" 

次に、その文字列をコンマで分割する必要がありますが、$100,00にもコンマが含まれているため、間違って分割されます。

したがって、最初に文字列を調べたいのですが、コンマを含む数字はありますか。ある場合は、コンマをピリオドに置き換えます。したがって、次のようになります。

"Foo Bar, FooTown, $100.00"

編集:

それは常に小さい数であり、複数の,.は存在しませんが、$1 $10 $100 $1000 の可能性があります

文字列の前にスペースがある場合とない場合があります。,

これは SMS メッセージです。

4

4 に答える 4

7

使用できます

>>> re.sub(r"(\d),(\d)", r"\1.\2", "Foo Bar, FooTown, $100,00")
'Foo Bar, FooTown, $100.00'
于 2012-08-08T18:05:17.170 に答える
2

ネガティブな先読みを使用することもできます...超強力なPython正規表現メカニズムで忘れられている大きなもの...

数字が前に付いていない、または数字が後に付いていないコンマで分割する正規表現を作成できます。

#!/usr/bin/env python

import re
samples=[
    "Foo Bar, FooTown, $100,00",
    "$100,00, Foo Bar, FooTown",
    "Foo Bar, $100,00, FooTown",
    "$100,00, Foo Bar, FooTown,",
]

myRegex=re.compile(",(?!\d)|(?<!\d),")

for sample in samples:
    print "%s sample splitted: %s (%s items)" % (sample, myRegex.split(sample), len(myRegex.split(sample)))

出力:

Foo Bar, FooTown, $100,00 sample splitted: ['Foo Bar', ' FooTown', ' $100,00'] (3 items)
$100,00, Foo Bar, FooTown sample splitted: ['$100,00', ' Foo Bar', ' FooTown'] (3 items)
Foo Bar, $100,00, FooTown sample splitted: ['Foo Bar', ' $100,00', ' FooTown'] (3 items)
$100,00, Foo Bar, FooTown, sample splitted: ['$100,00', ' Foo Bar', ' FooTown', ''] (4 items)

Pythonでreモジュールを開発してくれた人たちにはとても申し訳ありません...この種の先読みがほとんど使用されていないのを見たことがあります。

于 2012-08-08T18:15:22.547 に答える
1

データを修正するのではなく、分割を修正してみませんか?

>>> import re
>>> s = "Foo Bar, FooTown, $100,00"
>>> re.split(r'(?<!\d),|,(?!\d)', s)
['Foo Bar', ' FooTown', ' $100,00']

これは、負の先読みアサーションと後読みアサーションを使用して、コンマが数字で囲まれていないことを確認します。

編集:「$ 100,000、Foo Bar、FooTown」などの文字列を適切に処理するように正規表現をからr'(?<!\d),(?!\d)'に変更しました。r'(?<!\d),|,(?!\d)'コメントで私の誤りを指摘してくれたBorrajaXに感謝します。

于 2012-08-08T18:17:15.760 に答える
1

A RegEx replace of the pattern (\d),(\d) with \1.\2 will work. The \d matches any digit, and the parentheses around it means that the number will be remembered and \1 will match the first one and \2 will match the second one.

于 2012-08-08T18:04:24.547 に答える