[英]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.