Python中的re.sub()在替换字符串中的货币值时并不总是有效。

3

我用Python编写了一个“货币标记器”,它可以识别所有的货币表达式并将其替换为已标记的字符串。

例如,
"I have $20 in my pocket"
替换为 "I have <Currency>$20</Currency> in my pocket"

其中一个任务要求我使用标记字符串替换被识别为货币的字符串。我正在使用re.sub()进行操作。

对于除了"$4.4B"或"$4.4M"这种混合美元模式之外的所有字符串形式,它都能完美运行。

我尝试在我的Python控制台中运行简单的示例,并发现re.sub()在具有混合美元模式的模式上的工作是不一致的。

例如,

>>> text = "I have #20 in my pocket"
>>> re.sub("#20", "$20", text)
'I have $20 in my pocket'
>>> text = "I have $20 in my pocket"
>>> re.sub("$20", "#20", text)
'I have $20 in my pocket'

在上面的例子中,您可以看到,当我试图用“#20”替换“$20”时,它不起作用(在第二种情况下)。
当然,任何帮助都将不胜感激。一个非常愚蠢的错误已经出现,并因此而滞留了重要的工作。
2个回答

6

$是一个特殊字符。如果你想要替换它,使用

 re.sub(r"\$20", "#20", text)

          ^^

您需要进行转义,并使用r模式以避免转义问题。

$ 表示字符串结尾。因此,您的正则表达式效果不佳。


4
另外,你可以使用re.escape('$20'),在某些情况下可以使正则表达式更易于阅读... - mgilson

0

除非您正在使用正则表达式(而您似乎不是),否则没有理由使用“re”模块。

只需使用字符串的.replace()方法即可:

text.replace("#20", "$20")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接