如果我想替换以下语句结构中的模式:
cat&345;
bat &#hut;
我想替换从&
之前开始和结束的元素(不包括;
)。最好的方法是什么?
这是一个很好的正则表达式
基本上这会将替换放在和之间
import re
result = re.sub("(?<=\\&).*(?=;)", replacementstr, searchText)&
;
在替换中包括或不包括 & ?
>>> re.sub(r'&.*?(?=;)','REPL','cat&345;') # including
'catREPL;'
>>> re.sub(r'(?<=&).*?(?=;)','REPL','bat &#hut;') # not including
'bat &REPL;'
r'raw string'
来避免必须转义正则表达式中经常出现的反斜杠。.*?
是任何东西的“非贪婪”匹配,这使得匹配在第一个分号处停止。(?=;)
匹配必须后跟分号,但不包括在匹配中。(?<=&)
匹配必须以 & 开头,但它不包含在匹配中。也许一起去不同的方向并使用HTMLParser.unescape()
. 该unescape()
方法未记录在案,但它似乎不是“内部的”,因为它没有前导下划线。
您可以使用否定字符类来执行此操作:
import re
st='''\
cat&345;
bat &#hut;'''
for line in st.splitlines():
print line
print re.sub(r'([^&]*)&[^;]*;',r'\1;',line)