Подтвердить что ты не робот

Регулярное выражение для соответствия точке

Интересно, как лучше всего сочетать "test.this" с "blah blah blah [email protected] blah blah"? Использование Python.

Я пробовал re.split(r"\b\w.\[email protected]")

4b9b3361

Ответ 1

A . в регулярном выражении является метасимволом, он используется для соответствия любому символу. Чтобы соответствовать буквальной точке, вам нужно ее избежать, поэтому \.

Ответ 2

В вашем регулярном выражении вам нужно экранировать точку "\." или использовать ее внутри класса символов "[.]", так как это метасимвол в регулярном выражении, который соответствует любому символу.

Кроме того, вам нужно \w+ вместо \w, чтобы соответствовать одному или нескольким символам слова.


Теперь, если вам нужен контент test.this, тогда split - это не то, что вам нужно. split разделит вашу строку вокруг test.this. Например:

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

Вы можете использовать re.findall:

>>> re.findall(r'\w+[.]\w+([email protected])', s)   # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s)     # capture group
['test.this']

Ответ 3

"В режиме по умолчанию Dot (.) соответствует любому символу, кроме новой строки. Если указан флаг DOTALL, это соответствует любому символу, включая новую строку." (python Doc)

Итак, если вы хотите оценить точную букву, я думаю, вы должны положить ее в квадратные скобки:

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

Ответ 4

В 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]

Ответ 5

Это выражение,

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

также может работать нормально для этих типов входных строк.

Демо

Тест

import re

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

matches = re.findall(expression, string)

print(matches)

Выход

['test.this']

Если вы хотите упростить/изменить/изучить выражение, это было объяснено на верхней правой панели regex101.com. Если хотите, вы также можете посмотреть в этой ссылке, как она будет сопоставляться с некоторыми примерами входных данных.