Estou trabalhando em um caso semelhante em que desejo procurar uma string exata ( xyz) e quero saber qual é a maneira mais eficiente de fazer isso, devo usar o python 'xyz' in given_textou usar re.compile(r'xyz').search(given_text)?
bawejakunal
1
os []colchetes contêm uma classe de caractere, então seu re também corresponde: >>> word = 'ba |'; regexp.search (word) <objeto _sre.SRE_Match em 0x101030b28>. Você pode soltar todos os símbolos de tubos.
Por um lado, ele retorna um bool. OP: "deve retornar Truese a palavra contiver bar, baz ou ruim." Outras respostas usam o comportamento de if- conversão automática da expressão à sua direita em a bool. por exemplo, import re; rgx=re.compile(r'ba[rzd]'); rgx.search('foobar')=> <re.Match object; span=(2, 5), match='bar'>, mas if(rgx.search(w)): print('y')=> y. Mais
perto
15
Matchobjetos são sempre verdadeiros e Nonesão retornados se não houver correspondência. Apenas teste a veracidade.
Código:
>>> st ='bar'>>> m = re.match(r"ba[r|z|d]",st)>>>if m:... m.group(0)...'bar'
Saída = bar
Se você quiser searchfuncionalidade
>>> st ="bar">>> m = re.search(r"ba[r|z|d]",st)>>>if m isnotNone:... m.group(0)...'bar'
e se regexpnão for encontrado, então
>>> st ="hello">>> m = re.search(r"ba[r|z|d]",st)>>>if m:... m.group(0)...else:...print"no match"...
no match
Como @bukzor mencionou, se st = foo barthan match não funcionará. Portanto, é mais apropriado usar re.search.
Pelo que entendi a pergunta, a OP realmente quer, em searchvez de match. (Consulte docs.python.org/library/re.html#matching-vs-searching. ) Além disso, acho que seria útil se você mostrasse os argumentos reais possíveis, na ordem correta, em vez de apenas ....
ruakh
1
se você mudar stpara "foo bar", o método de correspondência não funcionará aqui. Você quer pesquisar.
@RanRag qual é a diferença de complexidade em pesquisar substring com in e regex?
Piyush S. Wanare
1
Esta é uma função que faz o que você deseja:
import re
def is_match(regex, text):
pattern = re.compile(regex, text)return pattern.search(text)isnotNone
O método de pesquisa de expressão regular retorna um objeto em caso de sucesso e Nenhum se o padrão não for encontrado na string. Com isso em mente, retornamos True, desde que a busca nos dê algo em troca.
O uso de pesquisa retornará um objeto SRE_match, se ele corresponder à sua string de pesquisa.
>>>import re
>>> m = re.search(u'ba[r|z|d]','bar')>>> m
<_sre.SRE_Match object at 0x02027288>>>> m.group()'bar'>>> n = re.search(u'ba[r|z|d]','bas')>>> n.group()
Caso contrário, ele retornará Nenhum
Traceback(most recent call last):File"<pyshell#17>", line 1,in<module>
n.group()AttributeError:'NoneType' object has no attribute 'group'
bool(re.search('ba[rzd]', 'sometext'))
.Respostas:
fonte
xyz
) e quero saber qual é a maneira mais eficiente de fazer isso, devo usar o python'xyz' in given_text
ou usarre.compile(r'xyz').search(given_text)
?[]
colchetes contêm uma classe de caractere, então seu re também corresponde: >>> word = 'ba |'; regexp.search (word) <objeto _sre.SRE_Match em 0x101030b28>. Você pode soltar todos os símbolos de tubos.O melhor de longe é
Retorna verdadeiro
fonte
bool
. OP: "deve retornarTrue
se a palavra contiver bar, baz ou ruim." Outras respostas usam o comportamento deif
- conversão automática da expressão à sua direita em abool
. por exemplo,import re; rgx=re.compile(r'ba[rzd]'); rgx.search('foobar')
=><re.Match object; span=(2, 5), match='bar'>
, masif(rgx.search(w)): print('y')
=>y
. MaisMatch
objetos são sempre verdadeiros eNone
são retornados se não houver correspondência. Apenas teste a veracidade.Código:
Saída =
bar
Se você quiser
search
funcionalidadee se
regexp
não for encontrado, entãoComo @bukzor mencionou, se st =
foo bar
than match não funcionará. Portanto, é mais apropriado usarre.search
.fonte
search
vez dematch
. (Consulte docs.python.org/library/re.html#matching-vs-searching. ) Além disso, acho que seria útil se você mostrasse os argumentos reais possíveis, na ordem correta, em vez de apenas...
.st
para"foo bar"
, o método de correspondência não funcionará aqui. Você quer pesquisar.in
eregex
?Esta é uma função que faz o que você deseja:
O método de pesquisa de expressão regular retorna um objeto em caso de sucesso e Nenhum se o padrão não for encontrado na string. Com isso em mente, retornamos True, desde que a busca nos dê algo em troca.
Exemplos:
fonte
Você pode fazer algo assim:
O uso de pesquisa retornará um objeto SRE_match, se ele corresponder à sua string de pesquisa.
Caso contrário, ele retornará Nenhum
E apenas imprimi-lo para demonstrar novamente:
fonte