在python中使用正则表达式时的单词边界是什么

时间:2012-04-13 08:55:46

标签: python

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

2 个答案:

答案 0 :(得分:7)

&#34;字边界&#34;意思是它所说的:一个词的boundary,即开头或结尾。

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

这很重要,因为与刚刚匹配的空格不同,它也会在整个输入的开头或结尾处匹配。

因此'\bfoo'将匹配'foobar''foo bar'以及'bar foo',但不会匹配'barfoo'

'foo\b'将匹配'foo bar''bar foo'以及'barfoo',但不会匹配'foobar'

答案 1 :(得分:1)

试试这个:

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位数字不是在边界处结束。