"test.this"
一致する最良の方法は何"blah blah blah test.this@gmail.com blah blah"
ですか? Python の使用。
私はもう試したre.split(r"\b\w.\w@")
.
正規表現の Aはメタ文字であり、任意の文字に一致するために使用されます。r""
生の Python 文字列 (または)のリテラル ドットに一致させるには、r''
エスケープする必要があるため、r"\."
正規表現では、任意の文字に一致する正規表現のメタ文字であるため、ドットをエスケープするか、文字クラス"\."
内で使用する必要があります。 "[.]"
\w+
また、代わりに\w
1 つ以上の単語文字に一致する必要があります。
さて、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']
「デフォルト モードでは、ドット (.) は改行を除くすべての文字に一致します。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'
ドットを含む文字列変数の英数字以外の文字をエスケープするには、次を使用できますre.escape
。
import re
expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)
出力:
whatever\.v1\.dfc
エスケープされた式を使用して、文字通り文字列を検索/一致させることができます。