Zastanawiałem się, co jest najlepszym sposobem, aby dopasować "test.this"
ze "blah blah blah [email protected] blah blah"
jest? Korzystanie z Pythona.
próbowałem re.split(r"\b\w.\w@")
Zastanawiałem się, co jest najlepszym sposobem, aby dopasować "test.this"
ze "blah blah blah [email protected] blah blah"
jest? Korzystanie z Pythona.
próbowałem re.split(r"\b\w.\w@")
\w
pasuje tylko do jednej postaci - prawdopodobnie chcesz\w+
Odpowiedzi:
A
.
w wyrażeniu regularnym jest metaznakiem, służy do dopasowania dowolnego znaku. Aby dopasować dosłowną kropkę, musisz od niej uciec, więc\.
źródło
W swoim wyrażeniu regularnym musisz uciec przed kropką
"\."
lub użyć go wewnątrz klasy znaków"[.]"
, ponieważ jest to metaznak w wyrażeniu regularnym, który pasuje do dowolnego znaku.\w+
Zamiast tego musisz\w
dopasować jeden lub więcej znaków słownych.Teraz, jeśli chcesz
test.this
treści,split
to nie jest to, czego potrzebujesz.split
podzieli twój ciąg wokółtest.this
. Na przykład:>>> re.split(r"\b\w+\.\w+@", s) ['blah blah blah ', 'gmail.com blah blah']
Możesz użyć
re.findall
:>>> re.findall(r'\w+[.]\w+(?=@)', s) # look ahead ['test.this'] >>> re.findall(r'(\w+[.]\w+)@', s) # capture group ['test.this']
źródło
Tak więc, jeśli chcesz oceniać kropkę dosłownie, myślę, że powinieneś umieścić ją w nawiasach kwadratowych:
>>> p = re.compile(r'\b(\w+[.]\w+)') >>> resp = p.search("blah blah blah [email protected] blah blah") >>> resp.group() 'test.this'
źródło
W javascript musisz użyć \. aby dopasować kropkę.
Przykład
"blah.tests.zibri.org".match('test\\..*') null
i
"blah.test.zibri.org".match('test\\..*') ["test.zibri.org", index: 5, input: "blah.test.zibri.org", groups: undefined]
źródło
aby uniknąć niealfanumerycznych znaków zmiennych łańcuchowych, w tym kropek, możesz użyć
re.escape
:import re expression = 'whatever.v1.dfc' escaped_expression = re.escape(expression) print(escaped_expression)
wynik:
możesz użyć wyrażenia ze znakiem ucieczki, aby znaleźć / dopasować ciąg dosłownie.
źródło
To wyrażenie,
może również działać poprawnie dla tych określonych typów ciągów wejściowych.
Próbny
Test
import re expression = r'(?<=^|\s)[^.\s]+\.[^.\s]+(?=@)' 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)
Wynik
['test.this']
Jeśli chcesz uprościć / zmodyfikować / zbadać wyrażenie, zostało to wyjaśnione w prawym górnym panelu regex101.com . Jeśli chcesz, możesz również obejrzeć w tym linku , jak to będzie się zgadzać z niektórymi przykładowymi danymi wejściowymi.
źródło