0

これを単純にしようとしていましたが、今は正規表現を複雑にしていると思います:

基本的に、文字列からすべての数字を削除したいのですが、コンマ記号や小数点がある可能性があることを考慮してください。

例:

$13 -> 13
$13.95 -> 13
$1,300 -> 1300
$ 13 -> 13
Only 3 left -> 3
34 sold -> 34
34% -> 34
(45%) -> 45
($14) -> 14
£13 -> 13 (unicode u00A3)

Python の現在の正規表現:

re.match(ur"\$?\u00A3?(?:\s+)?((\d+)\,?(\d+)?)\%?(?:\.[0-9]*)?", value)
4

3 に答える 3

2

非正規表現ベースのソリューションはどうですか?

>>> s = '$1,300'
>>> ''.join([x for x in s if x.isdigit()])
'1300'

$13.95 -> 13これは、理由を明確にする必要がある場合を除いて、すべての例で機能するはずです。負の数、浮動小数点数、科学表記法などを認識する必要がある場合は、微調整する必要があります。

于 2012-07-04T02:12:38.267 に答える
0

この正規表現はすべてに完全に一致する必要があります。

'\$?([0-9,]+)[.%]?'

ありのままの意味:

  • ドル記号を持つことができます
  • そこにあるすべての数字とコンマをつかみます[0-9,]
  • 数字がなくなったら停止し、a.またはa%が表示されます。
于 2012-07-04T02:24:09.910 に答える
0

あらゆるケースで機能します。後読みを使用しまし.

>>> u''.join(re.findall(ur'(?<!\.|\d)(\d+)', '$13.95'))
'13'
于 2012-07-04T02:14:52.977 に答える