Frage mich , was der beste Weg , entsprechen ist "test.this"
aus "blah blah blah test.this@gmail.com blah blah"
liegt? Python verwenden.
ich habe es versucht re.split(r"\b\w.\w@")
Frage mich , was der beste Weg , entsprechen ist "test.this"
aus "blah blah blah test.this@gmail.com blah blah"
liegt? Python verwenden.
ich habe es versucht re.split(r"\b\w.\w@")
Antworten:
In Ihrem regulären Ausdruck müssen Sie dem Punkt entkommen"\."
oder ihn innerhalb einer Zeichenklasse verwenden "[.]"
, da es sich um ein Metazeichen im regulären Ausdruck handelt, das mit jedem Zeichen übereinstimmt.
Außerdem müssen Sie \w+
statt \w
eines oder mehrerer Wortzeichen übereinstimmen.
Wenn Sie den test.this
Inhalt möchten , split
ist dies nicht das, was Sie brauchen. split
wird Ihre Saite um die teilen test.this
. Beispielsweise:
>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']
Sie können verwenden re.findall
:
>>> re.findall(r'\w+[.]\w+(?=@)', s) # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s) # capture group
['test.this']
"Im Standardmodus stimmt Punkt (.) Mit jedem Zeichen außer einer neuen Zeile überein. Wenn das DOTALL-Flag angegeben wurde, entspricht dies jedem Zeichen, einschließlich einer neuen Zeile." (Python Doc)
Wenn Sie also die Punktliteratur bewerten möchten, sollten Sie sie in eckige Klammern setzen:
>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'
Um nicht-alphanumerische Zeichen von Zeichenfolgenvariablen, einschließlich Punkten, zu umgehen, können Sie Folgendes verwenden re.escape
:
import re
expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)
Ausgabe:
whatever\.v1\.dfc
Sie können den maskierten Ausdruck verwenden, um die Zeichenfolge buchstäblich zu finden / abzugleichen.
Dieser Ausdruck,
(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)
funktioniert möglicherweise auch für diese bestimmten Arten von Eingabezeichenfolgen in Ordnung.
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']
Wenn Sie den Ausdruck vereinfachen / ändern / untersuchen möchten, wurde dies im oberen rechten Bereich von regex101.com erläutert . Wenn Sie möchten , können Sie in diesem Link auch sehen , wie es mit einigen Beispieleingaben übereinstimmt.
\w
passt nur zu einem einzelnen Charakter - Sie wollen wahrscheinlich\w+