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