ドットに一致する正規表現


93

最良の方法は一致しているかと思った"test.this"から"blah blah blah test.this@gmail.com blah blah"ですか?Pythonを使用します。

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


\wあなたはおそらくしたい-単一の文字のみ一致します\w+
ピーター・ボートン

2
ここだ電子メールの検証正規表現を使用すると、1つを探している場合。
chucksmash

回答:


161

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


44

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

また、1つ以上の単語文字を一致させる\w+代わりに必要\wです。


さて、あなたが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']

2
キャラクタークラスは+1。Jenkinsfileからgcovrを使用し、ドットディレクトリを除外しようとすると、Jenkinsはエスケープシーケンスを理解しません。キャラクタークラスは美しく機能しました。
Jonathan Landrum 2018年

13

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

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

>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'

0

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

import re

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

出力:

whatever\.v1\.dfc

エスケープされた式を使用して、文字列を文字通り検索/照合できます。


-1

javascriptでは、\を使用する必要があります。ドットに一致します。

"blah.tests.zibri.org".match('test\\..*')
null

そして

"blah.test.zibri.org".match('test\\..*')
["test.zibri.org", index: 5, input: "blah.test.zibri.org", groups: undefined]

JSではなくPythonを要求します
pl-jay

-2

この表現、

(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)

これらの特定のタイプの入力文字列でも問題なく機能する可能性があります。

デモ

テスト

import re

expression = r'(?<=^|\s)[^.\s]+\.[^.\s]+(?=@)'
string = '''
blah blah blah test.this@gmail.com blah blah
blah blah blah test.this @gmail.com blah blah
blah blah blah test.this.this@gmail.com blah blah
'''

matches = re.findall(expression, string)

print(matches)

出力

['test.this']

式を単純化/変更/探索したい場合は、regex101.comの右上のパネルで説明されています。必要に応じて、このリンクで、いくつかのサンプル入力とどのように一致するかを確認することもできます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.