Python: Encontre o padrão em uma string

Eu estou tentando encontrar uma maneira de combinar um padrão p em uma string s em python.

s = 'abccba' ss = 'facebookgooglemsmsgooglefacebook' p = 'xyzzyx' # s, p -> a, z # s and p can only be 'a' through 'z' def match(s, p): if s matches p: return True else: return False match(s, p) # return True match(ss, p) # return True 

Eu apenas tentei:

 import re s = "abccba" f = "facebookgooglemsmsgooglefacebook" p = "xyzzyx" def fmatch(s, p): p = re.compile(p) m = p.match(s) if m: return True else: return False print fmatch(s, p) print fmatch(f, p) 

Ambos retornam falso; eles deveriam ser verdade.

Eu converto seu padrão em uma expressão regular que pode ser usada por re.match . Por exemplo, seu xyzzyx se torna (.+)(.+)(.+)\3\2\1$ (a primeira ocorrência de cada letra se torna um grupo de captura (.+) E as ocorrências subseqüentes se tornam a referência de volta correta) .

 import re s = 'abccba' ss = 'facebookgooglemsmsgooglefacebook' p = 'xyzzyx' def match(s, p): nr = {} regex = [] for c in p: if c not in nr: regex.append('(.+)') nr[c] = len(nr) + 1 else: regex.append('\\%d' % nr[c]) return bool(re.match(''.join(regex) + '$', s)) print(match(s, p)) print(match(ss, p)) 

Se estou entendendo sua pergunta, você está procurando uma abordagem pythonic para correspondência de padrões em um conjunto de strings.

Aqui está um exemplo demonstrando o uso de abrangências de lista para atingir esse objective.

Espero que ajude você a alcançar seu objective. Por favor, deixe-me saber se posso ajudar mais. – JL

Demonstrar Nenhuma Correspondência Encontrada

 >>> import re >>> s = ["abccba", "facebookgooglemsmsgooglefacebook"] >>> p = "xyzzyx" >>> result = [ re.search(p,str) for str in s ] >>> result [None, None] 

Demonstrar Combinação de Partidas e Não Corresponder no resultado

 >>> p = "abc" >>> result = [ re.search(p,str) for str in s ] >>> result [<_sre.SRE_Match object at 0x100470780>, None] >>> [ m.group(0) if m is not None else 'No Match' for m in result ] ['abc', 'No Match'] >>> [ m.string if m is not None else 'No Match' for m in result ] ['abccba', 'No Match'] 

Demonstrar uma declaração única

 >>> [ m.string if m is not None else 'No Match' for m in [re.search(p,str) for str in s] ] ['abccba', 'No Match'] 

Compile um object de expressões regulares do Python para algum padrão de interesse e, em seguida, passe a string para seu método Match (string). Você desejará usar um object de match se precisar de uma saída booleana: https://docs.python.org/3/library/re.html#match-objects

Exemplo: Verifique a string s para qualquer caractere de palavra (isto é, alfanuméricos)

 def match_string(s): ##compile a regex for word characters regex = re.compile("\\w") ##return the result of the match function on string return re.match(s) 

Espero que ajude!

Você poderia fazer uso de expressões regulares.
Dê uma olhada aqui para alguns exemplos: Link

Eu acho que você poderia usar re.search()

Ecample:

 import re stringA = 'dog cat mouse' stringB = 'cat' # Look if stringB is in stringA match = re.search(stringB, stringA) if match: print('Yes!')