python正则表达式替换

时间:2011-10-15 23:40:00

标签: python regex

我正在尝试更改包含子串的字符串,例如

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)

但这不起作用

我该如何解决这个问题?

3 个答案:

答案 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,每当我遇到这样的问题时,最终会解决这个问题。

希望它有所帮助。