0

いくつかの金額をリストすることになっている文字列があり、次のようになります。

4000.05 . 5.200000000 300.650000 2000 .

最終的には次のようになります。

4000.05 5200000000 300650000 2000

10 進数以外のピリオドはすべて削除されます。この正規表現を使用して、2 つの数字と数字以外の文字が続いていないすべてのピリオドを削除しようとしています。

re.sub(".(?!([0-9])?!([0-9])?=([0-9]))","",f)

しかし、これは文字列全体を空にしてしまいます。どうすればこれを達成できますか?

4

2 に答える 2

3

まず、adotは正規表現のメタ文字であり、任意の文字に一致します。あなたはそれを逃れる必要があります。または、メタ文字が特別な意味を持たない文字クラスに入れます。もちろん、閉じ括弧をエスケープする必要があります。エスケープし]ないと、文字クラスの末尾と見なされます。

第二に、あなたの否定的な先読みには欠陥があります。

次のようなことを試してください:

re.sub(r'[.](?![0-9]{2}\W)',"",s)
于 2013-08-14T21:50:13.977 に答える
1

このようなものが必要です。

string = '4000.05 . 5.200000000 300.650000 2000 .'
print re.sub(r'[.](?![0-9]{2}\D)', '', string)

正規表現:

[.]                      any character of: '.'
  (?!                    look ahead to see if there is not:
    [0-9]{2}             any character of: '0' to '9' (2 times)
            \D           match non-digits (all but 0-9)
  )                      end of look-ahead
于 2013-08-14T22:02:00.603 に答える