- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
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
If the whole string matches this regular expression
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
match
和
fullmatch
只是
search
的快捷方式(如果可以这样称呼的话)方法?或者它们还有我忽略的其他用途吗?
最佳答案
给 @Ruzihm's answer 的信用因为我的部分答案来自他的。
快速概览
差异的快速概述:
re.match
anchor 定在开头 ^pattern
re.fullmatch
anchor 定在模式的开头和结尾 ^pattern$
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 ?
Python offers two different primitive operations based on regular expressions:
re.match()
checks for a match only at the beginning of the string, whilere.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.
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
使用三种方法中的任何一种都会产生相同的结果。
re.match
和
re.fullmatch
不匹配线 anchor
^
和
$
分别,但它们改为匹配字符串 anchor
\A
和
\Z
分别。
关于python - re.match、re.search、re.fullmatch 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58774029/
考虑以下正则表达式,它检查密码强度。它具有开始和结束字符串 anchor ,以确保它匹配整个字符串。 pattern = re.compile(r'^(?=.*[A-Z])(?=.*[a-z])(?=
这个问题在这里已经有了答案: What is the difference between re.search and re.match? (8 个回答) 1年前关闭。 来自 regex docs它说
Python 3.4 引入了新的正则表达式方法 re.fullmatch(pattern, string, flags=0) . 有没有人将这种新方法反向移植到旧的 Python 版本? 最佳答案 要
我是一名优秀的程序员,十分优秀!