gpt4 book ai didi

python re.sub 非贪婪替代失败,字符串中有换行符

转载 作者:太空狗 更新时间:2023-10-30 01:13:12 25 4
gpt4 key购买 nike

<分区>

我在 Python (2.7.9) 中遇到了一个正则表达式问题

我正在尝试去除 HTML <span>像这样使用正则表达式的标签:

re.sub(r'<span[^>]*>(.*?)</span>', r'\1', input_text, re.S)

(正则表达式这样读: <span ,任何不是 > 的东西,然后是 > ,然后是非贪婪匹配任何东西,然后是 </span> ,然后使用 re.S (re. DOTALL) 所以 . 匹配换行符

除非文本中有换行符,否则这似乎有效。看起来 re.S (DOTALL) 不适用于非贪婪匹配。

这是测试代码;从 text1 中删除换行符并且 re.sub 有效。放回去,re.sub 失败。将换行符放在 <span> 之外标签,并且 re.sub 有效。

#!/usr/bin/env python
import re
text1 = '<body id="aa">this is a <span color="red">test\n with newline</span></body>'
print repr(text1)
text2 = re.sub(r'<span[^>]*>(.*?)</span>', r'\1', text1, re.S)
print repr(text2)

为了比较,我写了一个 Perl 脚本来做同样的事情;正则表达式在这里按我预期的方式工作。

#!/usr/bin/perl
$text1 = '<body id="aa">this is a <span color="red">test\n with newline</span></body>';
print "$text1\n";
$text1 =~ s/<span[^>]*>(.*?)<\/span>/\1/s;
print "$text1\n";

有什么想法吗?

在 Python 2.6.6 和 Python 2.7.9 中测试

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com