web-dev-qa-db-fra.com

Python re: return True si regex contient dans la chaîne

J'ai une expression régulière comme celle-ci:

regexp = u'ba[r|z|d]'

La fonction doit retourner True si le mot contient bar, baz ou bad. En bref, j'ai besoin de regexp analog pour Python

'any-string' in 'text'

Comment puis-je le réaliser? Merci!

77
ghostmansd
import re
Word = 'fubar'
regexp = re.compile(r'ba[rzd]')
if regexp.search(Word):
  print 'matched'
122
mattbornski

Le meilleur de loin est

bool(re.search('ba[rzd]', 'foobarrrr'))

Renvoie vrai

87
Venu Murthy

Les objets Match sont toujours vrais et None est renvoyé s'il n'y a pas de correspondance. Juste tester la véracité.

Code:

>>> st = 'bar'
>>> m = re.match(r"ba[r|z|d]",st)
>>> if m:
...     m.group(0)
...
'bar'

Sortie = bar

Si vous voulez la fonctionnalité search

>>> st = "bar"
>>> m = re.search(r"ba[r|z|d]",st)
>>> if m is not None:
...     m.group(0)
...
'bar'

et si regexp non trouvé que

>>> st = "hello"
>>> m = re.search(r"ba[r|z|d]",st)
>>> if m:
...     m.group(0)
... else:
...   print "no match"
...
no match

Comme @bukzor a mentionné si st = foo bar que match ne fonctionnera pas. Donc, il est plus approprié d'utiliser re.search.

14
RanRag

Voici une fonction qui fait ce que vous voulez:

import re

def is_match(regex, text):
    pattern = re.compile(regex, text)
    return pattern.search(text) is not None

La méthode de recherche d'expression régulière retourne un objet en cas de succès et None si le modèle n'est pas trouvé dans la chaîne. Gardant cela à l’esprit, nous retournons Vrai tant que la recherche nous donne quelque chose en retour.

Exemples:

>>> is_match('ba[rzd]', 'foobar')
True
>>> is_match('ba[zrd]', 'foobaz')
True
>>> is_match('ba[zrd]', 'foobad')
True
>>> is_match('ba[zrd]', 'foobam')
False
1
kylan

Vous pouvez faire quelque chose comme ça:

L'utilisation de la recherche renvoie un objet SRE_match, s'il correspond à votre chaîne de recherche.

>>> 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()

Sinon, il retournera Aucun

Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    n.group()
AttributeError: 'NoneType' object has no attribute 'group'

Et juste pour l'imprimer pour démontrer à nouveau:

>>> print n
None
0
James R