Chiedevo che cosa il modo migliore è quello di abbinare "test.this"da "blah blah blah test.this@gmail.com blah blah"IS? Usare Python.
ho provato re.split(r"\b\w.\w@")
Chiedevo che cosa il modo migliore è quello di abbinare "test.this"da "blah blah blah test.this@gmail.com blah blah"IS? Usare Python.
ho provato re.split(r"\b\w.\w@")
Risposte:
Nella tua regex devi sfuggire al punto "\."o usarlo all'interno di una classe di caratteri "[.]" , poiché è un meta-carattere in regex, che corrisponde a qualsiasi carattere.
Inoltre, è necessario \w+invece di \wabbinare uno o più caratteri alfanumerici.
Ora, se vuoi il test.thiscontenuto, allora splitnon è quello che ti serve. splitdividerà la tua stringa attorno al file test.this. Per esempio:
>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']
Puoi usare re.findall:
>>> re.findall(r'\w+[.]\w+(?=@)', s) # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s) # capture group
['test.this']
"Nella modalità predefinita, il punto (.) Corrisponde a qualsiasi carattere tranne una nuova riga. Se è stato specificato il flag DOTALL, questo corrisponde a qualsiasi carattere, inclusa una nuova riga." (Python Doc)
Quindi, se vuoi valutare il punto letteralmente, penso che dovresti metterlo tra parentesi quadre:
>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'
per eseguire l'escape dei caratteri non alfanumerici delle variabili stringa, inclusi i punti, potresti usare re.escape:
import re
expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)
produzione:
whatever\.v1\.dfc
puoi usare l'espressione con escape per trovare / abbinare la stringa letteralmente.
Questa espressione,
(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)
potrebbe anche funzionare bene per quei tipi specifici di stringhe di input.
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']
Se desideri semplificare / modificare / esplorare l'espressione, è stato spiegato nel pannello in alto a destra di regex101.com . Se lo desideri, puoi anche guardare in questo link , come corrisponderebbe ad alcuni input di esempio.
\wcorrisponde solo a un singolo carattere - probabilmente lo vuoi\w+