我在使用re.sub
时有点犯了错误,因为它与所有其他python re
函数/方法的转义方式似乎有所不同。例如,以下表达式:
>>> re.sub(r'\smd:', r'\s', '<tag md:new>text</tag>')
我想会有回报:<tag new>text</tag>
实际返回:
<tag\snew>text</tag>
在\s
未被替换的情况下。原始字符串(^ {CD5}})不能在中间(^ {CD6}})ARG中工作吗?是否有一些关于如何使用的指南
在对它进行了一些尝试和错误之后,使用re.sub
的方法似乎是“捕获”空间并将其作为替代品传递回去:
>>> re.sub(r'(\s)md:', r'\1', '<tag md:new>text</tag>')
'<tag new>text</tag>'
在对
re.sub
的调用中,第一个参数r'\smd:'
应该是原始字符串,因为您希望正则表达式引擎解析\
,而不是Python。然而,第二个参数r'\s'
不需要是原始字符串,因为它不会被正则表达式引擎解析,但是您希望告诉Python它应该是一个空格,所以您可以传递它' '
因此,这将起作用:
另一件需要注意的事情是,您现在正在将
' md:'
替换为' '
,但是如果前面有空格,您可以将'md:'
替换为''
,这样做的好方法是:它并没有那么短,但它非常清楚您实际在做什么,并且在其他情况下会更好地工作,您知道之前的内容,但不能仅仅替换它。这被称为regex lookbehind表达式-并非所有引擎都支持它,但Python 3的
re
目前支持它\s
是一个字符集(空白),因此不清楚引擎希望用哪个字符替换匹配项。只需使用空格()即可:
相关问题 更多 >
编程相关推荐