132

"test.this"一致する最良の方法は何"blah blah blah test.this@gmail.com blah blah"ですか? Python の使用。

私はもう試したre.split(r"\b\w.\w@")

4

7 に答える 7

212

.正規表現の Aはメタ文字であり、任意の文字に一致するために使用されます。r""生の Python 文字列 (または)のリテラル ドットに一致させるには、r''エスケープする必要があるため、r"\."

于 2012-12-21T11:51:20.130 に答える
54

正規表現では、任意の文字に一致する正規表現のメタ文字であるため、ドットをエスケープするか、文字クラス"\."内で使用する必要があります。 "[.]"

\w+また、代わりに\w1 つ以上の単語文字に一致する必要があります。


さて、test.thisコンテンツsplitが必要な場合は、必要なものではありません。splitの周りで文字列を分割しますtest.this。例えば:

>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']

使用できますre.findall

>>> re.findall(r'\w+[.]\w+(?=@)', s)   # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s)     # capture group
['test.this']
于 2012-12-21T11:51:22.257 に答える
14

「デフォルト モードでは、ドット (.) は改行を除くすべての文字に一致します。DOTALL フラグが指定されている場合、これは改行を含むすべての文字に一致します。」(python ドキュメント)

したがって、ドットを文字通り評価したい場合は、角括弧で囲む必要があると思います。

>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'
于 2014-08-10T11:20:46.103 に答える
1

ドットを含む文字列変数の英数字以外の文字をエスケープするには、次を使用できますre.escape

import re

expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)

出力:

whatever\.v1\.dfc

エスケープされた式を使用して、文字通り文字列を検索/一致させることができます。

于 2020-07-07T12:56:25.367 に答える