regex 负查找在这个正则表达式中是如何工作的

6rqinv9w  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(81)
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以外的任何数字都会导致显示并匹配<!--怎么做?

ars1skjm

ars1skjm1#

下面是正则表达式模式分解:

(
    ?: # match either
      ^.{1,3}$ # ...a line of 1 to 3 characters, any characters (e.g. "aaa")
      | # ...or
      ^.{4} # ...4 characters of any kind, from the start of a line
        (?<! # # provided those 4 characters are not
            <!-- # these ones
            )  
)

字符串
现在基本模式已经被分解,我们可以看看变体:

r'''(?:^.{1,3}$|^.{3}(?<!<!--))'''

对于这个,我们可以看到它的第二部分工作得不好-它正在寻找三个不匹配四个字符串的字符("<!--",这没有任何意义。这也是为什么<!-是输出的一部分- Python正在寻找<!--,而不是<!-

r'''(?:^.{1,3}$|^.{5}(?<!<!--))'''

与前面的示例相同,除了在本例中,它要查找的是5个字符的字符串,而不是3个字符的字符串。再次找到<!--,因为它不是<!--
希望这对你有帮助!

相关问题