import re
text = """
This is a line.
Short
Long line
<!-- Comment line -->
"""
pattern = r'''(?:^.{1,3}$|^.{4}(?<!<!--))'''
matches = re.findall(pattern, text, flags=re.MULTILINE)
print(matches)
字符串pattern = r'''(?:^.{1,3}$|^.{4}(?<!<!--))'''
的输出:
['This', 'Shor', 'Long']
型pattern = r'''(?:^.{1,3}$|^.{3}(?<!<!--))'''
的输出:
['Thi', 'Sho', 'Lon', '<!-']
型pattern = r'''(?:^.{1,3}$|^.{5}(?<!<!--))'''
的输出:
['This ', 'Short', 'Long ', '<!-- ']
型.{4}(?<!<!--))
中除4以外的任何数字都会导致显示并匹配<!--怎么做?
1条答案
按热度按时间ars1skjm1#
下面是正则表达式模式分解:
字符串
现在基本模式已经被分解,我们可以看看变体:
r'''(?:^.{1,3}$|^.{3}(?<!<!--))'''
对于这个,我们可以看到它的第二部分工作得不好-它正在寻找三个不匹配四个字符串的字符(
"<!--"
,这没有任何意义。这也是为什么<!-
是输出的一部分- Python正在寻找<!--
,而不是<!-
r'''(?:^.{1,3}$|^.{5}(?<!<!--))'''
与前面的示例相同,除了在本例中,它要查找的是5个字符的字符串,而不是3个字符的字符串。再次找到
<!--
,因为它不是<!--
。希望这对你有帮助!