繁体   English   中英

请解释 re 模块在这种情况下如何工作, re.sub() 和 re.findall 似乎给出了不同的匹配

[英]Please explain how re module works in this case, re.sub() and re.findall seem to give different matches

我正在 Python 中学习 RegEx 并遇到了这个问题。 假设我有一个名为s的变量:

>>>print(repr(s))
'HTML elements include\n\n* headings\n* paragraphs\n* lists\n* links\n* and more\n\nTry it!!!'

我想匹配 s 的 '* 标题\\n* 段落\\n* 列表\\n* 链接\\n* 和更多\\n' 部分(以*开头,以\\n结尾,尽可能多地发生),所以我的代码是:

>>>print(re.findall(r'(\*.+?\n)+', s))
['* and more!\n']

我不明白为什么只匹配最后一个模式。 但是当我使用 re.sub() 时,整个模式都被替换了。

>>> print(re.sub(r'(\*.+?\n)+', 'text', s))
HTML elements include

text
Try it!!!

这表明 re.sub() 匹配我想要的正确模式。 所以我真的很困惑为什么我会得到这个。 谢谢你的时间。

以下正则表达式符合您想要实现的目标:

import re

desired_output = r'* headings\n* paragraphs\n* lists\n* links\n* and more\n'

s = r'HTML elements include\n\n* headings\n* paragraphs\n* lists\n* links\n* and more\n\nTry it!!!'

pattern = re.compile(r'n(\*.+)\\')

match = re.search(pattern, s).group(1)
print(match)

assert match == desired_output

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM