最良の方法は一致しているかと思った"test.this"
から"blah blah blah test.this@gmail.com blah blah"
ですか?Pythonを使用します。
私はもう試した re.split(r"\b\w.\w@")
最良の方法は一致しているかと思った"test.this"
から"blah blah blah test.this@gmail.com blah blah"
ですか?Pythonを使用します。
私はもう試した re.split(r"\b\w.\w@")
回答:
正規表現では、ドットをエスケープする"\."
か、文字クラス内で使用する必要があります "[.]"
これは、正規表現のメタ文字であり、任意の文字と一致するためです。
また、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']
この表現、
(?<=\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の右上のパネルで説明されています。必要に応じて、このリンクで、いくつかのサンプル入力とどのように一致するかを確認することもできます。
\w
あなたはおそらくしたい-単一の文字のみ一致します\w+