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

「単語の境界」とは、それが言うことを正確に意味します。つまり、単語の境界、つまり最初または最後のいずれかです。

入力内の実際の文字とは一致しませんが、現在の一致位置が単語の先頭または末尾にある場合にのみ一致します。

空白を一致させた場合とは異なり、入力全体の最初または最後でも一致するため、これは重要です。

したがって、andと、'\bfoo'は一致しますが、は一致しません。'foobar''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)

ドットを正しくエスケープしたことに注目してください。正規表現は最後の1〜3桁の後に何が来るかを気にしないため、IPが見つかります。

今:

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 に答える