2

Python 正则表达式中的单词边界是什么?有人可以在这些例子中解释一下吗:

示例 1

>>> x = '456one two three123'
>>> y=re.search(r"\btwo\b",x)
>>> y
<_sre.SRE_Match object at 0x2aaaaab47d30>

示例 2

>>> y=re.search(r"two",x)
>>> y
<_sre.SRE_Match object at 0x2aaaaab47d30>

示例 3

>>> ip="192.168.254.1234"
>>> if re.search(r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b",ip):
...    print ip
...

示例 4

>>> ip="192.168.254.1234"
>>> if re.search(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",ip):
...    print ip
192.168.254.1234
4

2 回答 2

13

“单词边界”的意思正是它所说的:单词的边界,即开头或结尾。

它不匹配输入中的任何实际字符,但仅当当前匹配位置位于单词的开头或结尾时才会匹配。

这很重要,因为与仅匹配空格不同,它还将匹配整个输入的开头或结尾。

所以'\bfoo'会匹配'foobar'and 'foo bar''bar foo'但不是'barfoo'

'foo\b'将匹配'foo bar'and 'bar foo''barfoo'但不匹配'foobar'

于 2012-04-13T09:13:04.743 回答
-2

尝试这个:

ip="192.168.254.1234"
res = re.findall("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",ip)
print(res)

请注意我是如何正确转义这些点的。找到 ip 是因为正则表达式不关心最后 1-3 位数字之后的内容。

现在:

ip="192.168.254.1234"
res = re.findall("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b",ip)
print(res)

这不起作用,因为最后 1-3 位数字没有在边界处结束。

于 2012-04-13T09:12:26.093 回答