0

如果我想替换以下语句结构中的模式:

cat&345;
bat &#hut;

我想替换从&之前开始和结束的元素(不包括;)。最好的方法是什么?

4

4 回答 4

1

这是一个很好的正则表达式 基本上这会将替换放在和之间
import re
result = re.sub("(?<=\\&).*(?=;)", replacementstr, searchText)

&;

于 2013-06-28T02:09:51.503 回答
1

在替换中包括或不包括 & ?

>>> re.sub(r'&.*?(?=;)','REPL','cat&345;')           # including
'catREPL;'
>>> re.sub(r'(?<=&).*?(?=;)','REPL','bat &#hut;')    # not including
'bat &REPL;'

解释:

  • 虽然这里不需要,但使用 ar'raw string'来避免必须转义正则表达式中经常出现的反斜杠。
  • .*?是任何东西的“非贪婪”匹配,这使得匹配在第一个分号处停止。
  • (?=;)匹配必须后跟分号,但不包括在匹配中。
  • (?<=&)匹配必须以 & 开头,但它不包含在匹配中。
于 2013-06-28T02:20:43.087 回答
0

也许一起去不同的方向并使用HTMLParser.unescape(). 该unescape()方法未记录在案,但它似乎不是“内部的”,因为它没有前导下划线。

于 2013-06-28T02:24:40.790 回答
0

您可以使用否定字符类来执行此操作:

import re

st='''\
cat&345;
bat &#hut;'''

for line in st.splitlines():
    print line
    print re.sub(r'([^&]*)&[^;]*;',r'\1;',line)
于 2013-06-28T02:38:17.787 回答