Python - 正则表达式查找字符串中的所有匹配项并替换

时间:2014-10-10 07:38:36

标签: python regex

我在使用正则表达式替换字符串时出现问题,似乎无法让它工作

string = "<font x=''>test</font> <font y=''>test2</font> <font z=''>test3</font>"
if re.search("(<font .*?>)", string, re.IGNORECASE):
    r = re.compile(r"<font (?P<name>.*?)>.*?</font>", re.IGNORECASE)
    string = r.sub(r'', string)

由于某些原因,所有正则表达式都删除整个字符串''。它应该以{{1​​}}

返回

2 个答案:

答案 0 :(得分:5)

在这里,

>>> import re
>>> string = "<font x=''>test</font> <font y=''>test2</font> <font z=''>test3</font>"
>>> if re.search("(<font .*?>)", string, re.IGNORECASE):
...     r = re.compile(r"</?font.*?>", re.IGNORECASE)
...     string = r.sub(r'', string)
... 
>>> string
'test test2 test3'

DEMO

模式说明:

  • </?font.*?>此正则表达式将匹配所有打开和关闭字体标记。在?之后添加/会将前一个/字符设为可选字段。
  • .*?将尽可能短的匹配。 ?之后的*会强制正则表达式引擎执行尽可能短的匹配,因为默认情况下*是贪婪的。它可能会尽可能多地消耗掉这些字符。
  • >按字面意思匹配>符号。
  • re.IGNORECASE称为不区分大小写的修饰符。

答案 1 :(得分:0)

>([^<]*)<\/

您可以将其用作

y="<font x=''>test</font> <font y=''>test2</font> <font z=''>test3</font>"
x=re.findall(r"(?<=>)([^<]*)(?=<\/)",y) 
str=" ".join(x)
print str

参见演示

http://regex101.com/r/xT7yD8/6