A .в регулярном выражении - это метасимвол, он используется для соответствия любому символу. Чтобы соответствовать буквальной точке, вам нужно убрать ее, поэтому\.
В вашем регулярном выражении вам нужно экранировать точку "\."или использовать ее внутри класса символов"[.]" , поскольку это метасимвол в регулярном выражении, который соответствует любому символу.
Кроме того, вам нужно \w+вместо \wсопоставления одного или нескольких символов слова.
Теперь, если вам нужен test.thisконтент, splitэто не то, что вам нужно. splitразделит вашу строку вокруг test.this. Например:
+1 для класса персонажа. Используя gcovr из Jenkinsfile и пытаясь исключить точечные каталоги, Jenkins не понимает escape-последовательности. Класс персонажа работал прекрасно.
Джонатан Ландрам
13
«В режиме по умолчанию точка (.) Соответствует любому символу, кроме новой строки. Если был указан флаг DOTALL, он соответствует любому символу, включая новую строку». (Документ Python)
Итак, если вы хотите оценить точку буквально, я думаю, вам следует заключить ее в квадратные скобки:
Если вы хотите упростить / изменить / изучить выражение, оно объясняется в правой верхней панели regex101.com . Если хотите, вы также можете посмотреть по этой ссылке , как это будет соответствовать некоторым образцам входных данных.
\w
соответствует только одному символу - вы, вероятно, захотите\w+
Ответы:
A
.
в регулярном выражении - это метасимвол, он используется для соответствия любому символу. Чтобы соответствовать буквальной точке, вам нужно убрать ее, поэтому\.
источник
В вашем регулярном выражении вам нужно экранировать точку
"\."
или использовать ее внутри класса символов"[.]"
, поскольку это метасимвол в регулярном выражении, который соответствует любому символу.Кроме того, вам нужно
\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']
источник
Итак, если вы хотите оценить точку буквально, я думаю, вам следует заключить ее в квадратные скобки:
>>> 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)
выход:
вы можете использовать экранированное выражение, чтобы буквально найти / сопоставить строку.
источник
В 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]
источник
Это выражение,
также может работать нормально для этих конкретных типов входных строк.
Демо
Контрольная работа
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 . Если хотите, вы также можете посмотреть по этой ссылке , как это будет соответствовать некоторым образцам входных данных.
источник