【发布时间】:2019-05-25 01:33:04
【问题描述】:
我有一个文本,其中数字以各种可能的方式出现。 例如,
text = "hello23 the2e are 13 5.12apples *specially_x00123 named 31st"
我想用 '#' 替换所有数字,但以 *、单词、下划线、任何字符和数字开头的特殊模式除外,如 *\w+_[a-z]\d+(即*特别是_x00123)。
我尝试使用lookaround 语法和non-capturing group,但找不到将其完全更改为如下方式的方法
text_cleaned = "hello## the#e are ## #.##apples *specially_x00123 named ##st"
我可以使用如下模式:
p1 = r'\d(?<!\*\w+_\w+)'
然后,它就这样抱怨; "look-behind 需要固定宽度的模式"
我尝试使用非捕获组:
p2 = r'(?:\*[a-z]+_\w+)\b|\d'
它取出特殊标记(*specially_x000123)和所有数字。我认为这是我可能包含在解决方案中的内容,但我找不到如何。有什么想法吗?
【问题讨论】:
-
@emma 问题标题已编辑,这不是我的意思。我想替换所有数字,但不是特殊模式中的数字,例如“*specially_x000123”中的数字
-
当你说"except something" you can often use
(*SKIP)(*FAIL)时,只有pypi regex module 支持。如果你使用它,你的正则表达式可以简单地例如\*\S+(*SKIP)(*F)|\d并替换为空字符串。
标签: python regex string replace regex-group