gpt4 book ai didi

python - re.match、re.search、re.fullmatch 之间的差异

转载 作者:行者123 更新时间:2023-12-01 01:40:15 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





What is the difference between re.search and re.match?

(8 个回答)


1年前关闭。




来自 regex docs它说:

Pattern.match(...)

If zero or more characters at the beginning of string match this regular expression



Pattern.fullmatch(...)

If the whole string matches this regular expression



Pattern.search(...)

Scan through string looking for the first location where this regular expression produces a match



鉴于上述情况,为什么有人不能总是使用 search做一切?例如:
re.search(r'...'   # search
re.search(r'^...' or re.search(r'\A...' # match
re.search(r'^...$' or re.search(r'\A...\Z' # fullmatch

matchfullmatch只是 search 的快捷方式(如果可以这样称呼的话)方法?或者它们还有我忽略的其他用途吗?

最佳答案

@Ruzihm's answer 的信用因为我的部分答案来自他的。

快速概览

差异的快速概述:

  • re.match anchor 定在开头 ^pattern
  • 确保字符串以模式
  • 开头
  • re.fullmatch anchor 定在模式的开头和结尾 ^pattern$
  • 确保完整的字符串与模式匹配(对于如 here 所述的交替特别有用)
  • re.search未 anchor 定 pattern
  • 确保字符串包含模式

  • 更深入的对比 re.match对比 re.search可以找到 here

    举例:
    aa            # string
    a|aa # regex

    re.match: a
    re.search: a
    re.fullmatch: aa
    ab            # string
    ^a # regex

    re.match: a
    re.search: a
    re.fullmatch: # None (no match)

    那么 \A呢?和 \Z anchor ?

    documentation声明如下:

    Python offers two different primitive operations based on regular expressions: re.match() checks for a match only at the beginning of the string, while re.search() checks for a match anywhere in the string (this is what Perl does by default).



    而在 Pattern.fullmatch它说:

    If the whole string matches this regular expression, return a corresponding match object.



    而且,正如 Ruzihm 在他的回答中最初发现和引用的那样:

    Note however that in MULTILINE mode match() only matches at the beginning of the string, whereas using search() with a regular expression beginning with ^ will match at the beginning of each line.

    >>> re.match('X', 'A\nB\nX', re.MULTILINE)  # No match
    >>> re.search('^X', 'A\nB\nX', re.MULTILINE) # Match
    <re.Match object; span=(4, 5), match='X'>

    \A^A
    B
    X$\Z

    # re.match('X', s) no match
    # re.search('^X', s) no match

    # ------------------------------------------
    # and the string above when re.MULTILINE is enabled effectively becomes

    \A^A$
    ^B$
    ^C$\Z

    # re.match('X', s, re.MULTILINE) no match
    # re.search('^X', s, re.MULTILINE) match X

    关于 \A\Z ,对于 re.MULTILINE,两者的表现都不一样自 \A\Z实际上是唯一的 ^$在整个字符串中。

    所以使用 \A\Z使用三种方法中的任何一种都会产生相同的结果。

    答案(线 anchor 与字符串 anchor )

    这告诉我的是 re.matchre.fullmatch不匹配线 anchor ^$分别,但它们改为匹配字符串 anchor \A\Z分别。

    关于python - re.match、re.search、re.fullmatch 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58774029/

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