Queria saber qual a melhor maneira é combinar "test.this"a partir "blah blah blah test.this@gmail.com blah blah"é? Usando Python.
eu tentei re.split(r"\b\w.\w@")
Queria saber qual a melhor maneira é combinar "test.this"a partir "blah blah blah test.this@gmail.com blah blah"é? Usando Python.
eu tentei re.split(r"\b\w.\w@")
Respostas:
Em sua regex, você precisa escapar do ponto "\."ou usá-lo dentro de uma classe de caractere "[.]" , pois é um metacaractere na regex, que corresponde a qualquer caractere.
Além disso, você precisa em \w+vez de \wcorresponder a um ou mais caracteres do word.
Agora, se você quer o test.thisconteúdo, então splitnão é o que você precisa. splitirá dividir sua corda em torno do test.this. Por exemplo:
>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']
Você pode usar re.findall:
>>> re.findall(r'\w+[.]\w+(?=@)', s) # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s) # capture group
['test.this']
"No modo padrão, Ponto (.) Corresponde a qualquer caractere, exceto uma nova linha. Se o sinalizador DOTALL foi especificado, ele corresponde a qualquer caractere incluindo uma nova linha." (python Doc)
Então, se você quiser avaliar o ponto literalmente, acho que você deve colocá-lo entre colchetes:
>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'
para escapar caracteres não alfanuméricos de variáveis de string, incluindo pontos, você pode usar re.escape:
import re
expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)
resultado:
whatever\.v1\.dfc
você pode usar a expressão de escape para localizar / combinar a string literalmente.
Esta expressão,
(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)
também pode funcionar bem para esses tipos específicos de strings de entrada.
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 você deseja simplificar / modificar / explorar a expressão, isso foi explicado no painel superior direito de regex101.com . Se desejar, você também pode assistir neste link , como ele corresponderia a algumas entradas de amostra.
\wcorresponde apenas a um único caractere - provavelmente você deseja\w+