Интересно, как лучше всего сочетать "test.this"
с "blah blah blah [email protected] blah blah"
? Использование Python.
Я пробовал re.split(r"\b\w.\[email protected]")
Интересно, как лучше всего сочетать "test.this"
с "blah blah blah [email protected] blah blah"
? Использование Python.
Я пробовал re.split(r"\b\w.\[email protected]")
A .
в регулярном выражении является метасимволом, он используется для соответствия любому символу. Чтобы соответствовать буквальной точке, вам нужно ее избежать, поэтому \.
В вашем регулярном выражении вам нужно экранировать точку "\."
или использовать ее внутри класса символов "[.]"
, так как это метасимвол в регулярном выражении, который соответствует любому символу.
Кроме того, вам нужно \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']
"В режиме по умолчанию 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'
В 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]
Это выражение,
(?<=\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. Если хотите, вы также можете посмотреть в этой ссылке, как она будет сопоставляться с некоторыми примерами входных данных.