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

the*_*dee 3 python regex text-mining python-2.7

我在Python中构建了一个"货币标记器",它标识所有货币表达式并用标记的字符串替换它们.

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

其中一项任务要求我用标记字符串替换标识为Currency的字符串.我正在使用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'
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,您会看到当我尝试将"$ 20"替换为"#20"时,它不起作用(在第二种情况下).

当然,任何帮助都将非常感激.由于这个原因,一个非常愚蠢的虫子出现了并且正在拖延主要工作.

vks*_*vks 6

$是一个special character.所以,如果你想替换它使用

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

          ^^
Run Code Online (Sandbox Code Playgroud)

你将不得不这样escape做.也使用r模式来避免escaping问题.

$ 意味着字符串结束.所以你的正则表达式是无效的.

  • 或者,您可以使用`re.escape('$ 20')`这可以使正则表达式在某些情况下更容易阅读... (4认同)