python正则表达式标记
|
我想改变这个字符串
<p><b> hello world </b></p>. I am playing <b> python </b>
至:
<bold><bold>hello world </bold></bold>, I am playing <bold> python </bold>
我用了:
import re
pattern = re.compile(r\'\\<p>(.*?)\\</p>|\\<b>(.*?)\\</b>\')
print re.sub(pattern, r\'<bold>\\1</bold>\', \"<p><b>hello world</b></p>. I am playing <b> python</b>\")
它不输出我想要的内容,它报错:组不匹配
它在这种情况下有效:
re.sub(pattern, r\'<bold>\\1</bold>\', \"<p>hello world</p>. I am playing <p> python</p>\")
<bold> hello world </bold>
。我在玩<bold> python</bold>
没有找到相关结果
已邀请:
3 个回复
目浆搽
我认为您遇到的问题是因为Python如何采用Groups。 测试以下内容,您将明白我的意思:
您将看到以下内容:
而且无论如何,要算出它首先匹配
之间的值,因此它以
(您也想匹配的东西)为第一匹配。也许在
中更改已编译正则表达式的顺序可以解决此问题,但可能会相反(具有
) 我希望可以提供更多信息,但是我对使用Python的正则表达式不是很好。 C#采取不同的方式。 编辑: 我了解您可能不知道要使用正则表达式来实现此目的,但是在生产代码中,我会选择另一种方法(例如@Senthil给您的方法)或仅使用HTML解析器。
坍锭嘉韭蓝
孝铜差
匹配,则没有。我提供了几种解决方案。 第一,
将匹配给定的一对标签。但是,正如您所看到的,它必须在字符串上使用两次,因为当它与
标签匹配时,它会跳过嵌套的
标签。 这是我会选择的选项: