2

私がしたいのは、ドル記号「$」を削除することだけです。これは単純に思えますが、コードが機能しない理由が本当にわかりません。

import re
input = '$5'
if '$' in input:
    input = re.sub(re.compile('$'), '', input)
    print input

入力は '5' ではなく '$5' のままです! 誰でも助けることができますか?

4

5 に答える 5

7

replace代わりに使用してみてください:

input = input.replace('$', '')

Madbreaks が述べているよう$に、正規表現で行末に一致することを意味します。

正規表現への便利なリンクは次のとおりです: http://docs.python.org/2/library/re.html

于 2013-03-05T01:21:01.303 に答える
4

この場合、私は使用しますstr.translate

>>> '$$foo$$'.translate(None,'$')
'foo' 

そして、ベンチマーク目的のために:

>>> def repl(s):
...     return s.replace('$','')
... 
>>> def trans(s):
...     return s.translate(None,'$')
... 
>>> import timeit
>>> s = '$$foo bar baz $ qux'
>>> print timeit.timeit('repl(s)','from __main__ import repl,s')
0.969965934753
>>> print timeit.timeit('trans(s)','from __main__ import trans,s')
0.796354055405

と の間には多くの違いがstr.replaceありstr.translateます。最も注目に値するのは、 1 つの文字を別の文字に置き換えるstr.translate一方で、1 つの部分文字列を別の文字列に置き換えるのに役立つことです。str.replaceなので、全キャラ削除しa,b,cたい、 に変更aしたい、などのお悩みdには をオススメしstr.translateます。abc逆に、「部分文字列を次の文字列に置き換えたい」などの問題defstr.replace.

正規表現で特別な意味があるため、例が機能しないことに注意してください$(文字列の末尾に一致します)。正規表現で動作させるには、次をエスケープする必要があります$

>>> re.sub('\$','',s)
'foo bar baz  qux'

正常に動作します。

于 2013-03-05T01:22:21.973 に答える
2

$ は、「文字列の末尾」に変換される正規表現の特殊文字です。

文字通りに使用したい場合は、エスケープする必要があります

これを試して:

import re
input = "$5"
if "$" in input:
    input = re.sub(re.compile('\$'), '', input)
    print input
于 2013-03-05T01:27:13.270 に答える
1

ドル記号をエスケープする必要があります-そうしないと、Pythonはそれがアンカーであると考えます http://docs.python.org/2/library/re.html

import re
fred = "$hdkhsd%$"
print re.sub ("\$","!", fred)
>> !hdkhsd%!
于 2013-03-05T01:30:37.527 に答える
-1

他の回答とは別に、次のものも使用できますstrip()

input = input.strip('$')
于 2013-03-05T01:22:40.863 に答える