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.replacestr.translate。最值得注意的是,这str.translate对于将 1 个字符与另一个字符进行切换而str.replace将 1 个子字符串替换为另一个字符很有用。因此,对于诸如我想删除所有字符之类的问题a,b,c,或者我想更改ad,我建议str.translate。相反,诸如“我想abcdef”替换子字符串之类的问题非常适合str.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 回答