我正在尝试更改包含子串的字符串,例如
the</span></p>
<p><span class=font7>currency
到
the currency
换行符是CRLF
代码更改前后的字样。如果第二个单词以小写字母开头,我只想替换。代码中唯一改变的是'font'
之后的数字我试过了:
p = re.compile('</span></p>\r\n<p><span class=font\d>([a-z])')
res = p.sub(' \1', data)
但这不起作用
我该如何解决这个问题?
答案 0 :(得分:1)
使用先行断言。
p = re.compile('</span></p>\r\n<p><span class=font\d>(?=[a-z])')
res = p.sub(' ', data)
答案 1 :(得分:1)
这:
result = re.sub("(?si)(.*?)</?[A-Z][A-Z0-9]*[^>]*>.*</?[A-Z][A-Z0-9]*[^>]*>(.*)", r"\1 \2", subject)
适用于:
the</span></p>
<p><span class=font7>currency
制作:
the currency
虽然我强烈建议不要在xml / html / xhtml中使用正则表达式。通用正则表达式将删除所有元素并捕获组1,2之前/之后的任何文本。
答案 2 :(得分:1)
我认为你应该使用标志re.DOTALL,这意味着它将“看到”不可打印的字符,例如换行符,就像它们是普通字符一样。
因此,代码的第一行将成为:
p = re.compile('</span></p>..<p><span class=font\d>([a-z])', re.DOTALL)
(不是两个未转义的点而不是换行符。)
实际上,还有re.MULTILINE,每当我遇到这样的问题时,最终会解决这个问题。
希望它有所帮助。