Python hace coincidir una cadena con expresiones regulares

Necesito una expresión regular de python para verificar si una palabra está presente en una cadena. La cadena está separada por comas, potencialmente.

Así por ejemplo,

line = 'This,is,a,sample,string' 

Quiero buscar en base a “muestra”, esto devolvería verdadero. Estoy crappy con reg ex, así que cuando miré los documentos de python, vi algo como

 import re re.match(r'sample', line) 

Pero no sé por qué había una ‘r’ antes del texto que debía coincidir. ¿Puede alguien ayudarme con la expresión regular?

¿Estás seguro de que necesitas una expresión regular? Parece que solo necesitas saber si una palabra está presente en una cadena, por lo que puedes hacer:

 >>> line = 'This,is,a,sample,string' >>> "sample" in line True 

La r hace que la cadena sea una cadena sin procesar , que no procesa caracteres de escape (sin embargo, dado que no hay ninguna en la cadena, en realidad no es necesaria aquí).

Además, re.match coincide desde el principio de la cadena. En otras palabras, busca una coincidencia exacta entre la cadena y el patrón. Para hacer coincidir cosas que podrían estar en cualquier parte de la cadena, usa re.search . Vea una demostración a continuación:

 >>> import re >>> line = 'This,is,a,sample,string' >>> re.match("sample", line) >>> re.search("sample", line) <_sre.SRE_Match object at 0x021D32C0> >>> 

r representa una cadena en bruto, por lo que Python escapará automáticamente a cosas como \.

Normalmente, si desea que su patrón incluya algo como una barra invertida, tendrá que escapar con otra barra invertida. cuerdas crudas eliminan este problema.

breve explicación

En su caso, no importa mucho, pero es un buen hábito llegar temprano. De lo contrario, algo como \ b lo morderá por detrás si no tiene cuidado (se interpretará como carácter de retroceso en lugar de límite de palabra)

De acuerdo con re.match vs re.search, aquí hay un ejemplo que lo aclarará:

 >>> import re >>> testString = 'hello world' >>> re.match('hello', testString) <_sre.SRE_Match object at 0x015920C8> >>> re.search('hello', testString) <_sre.SRE_Match object at 0x02405560> >>> re.match('world', testString) >>> re.search('world', testString) <_sre.SRE_Match object at 0x015920C8> 

Así que la búsqueda encontrará una coincidencia en cualquier lugar, la partida solo comenzará al principio

No necesita expresiones regulares para verificar si existe una subcadena en una cadena.

 line = 'This,is,a,sample,string' result = bool('sample' in line) # returns True 

Si desea saber si una cadena contiene un patrón , debe usar re.search

 line = 'This,is,a,sample,string' result = re.search(r'sample', line) # finds 'sample' 

Esto se usa mejor con la coincidencia de patrones, por ejemplo:

 line = 'my name is bob' result = re.search(r'my name is (\S+)', line) # finds 'bob' 

Como todos los demás han mencionado, es mejor usar el operador “in”, también puede actuar en las listas:

 line = "This,is,a,sample,string" lst = ['This', 'sample'] for i in lst: i in line >> True >> True 

Implementación de un Liner:

 a=[1,3] b=[1,2,3,4] all(i in b for i in a)