Como extrair uma lista de subcordas baseadas em alguns padrões em python?
por exemplo,
str = "this {{is}} a sample {{text}}".
resultado esperado: uma lista python que contém "é" e "texto"
Respostas:
14 para resposta № 1>>> import re
>>> re.findall("{{(.*?)}}", "this {{is}} a sample {{text}}")
["is", "text"]
2 para resposta № 2
Assumindo "alguns padrões" significa "palavras simples entre o dobro {}" s ":
import re
re.findall ("{{(w *)}}", string)
Edit: resposta de Andrew Clark implementa "qualquer seqüência de caracteres em tudo entre double {}" s "
2 para resposta № 3
Você pode usar o seguinte:
res = re.findall("{{([^{}]*)}}", a)
print "a python list which contains %s and %s" % (res[0], res[1])
Felicidades
1 para resposta № 4
Uma solução baseada em regex é adequada para o seu exemplo, embora eu recomende algo mais robusto para uma entrada mais complicada.
import re
def match_substrings(s):
return re.findall(r"{{([^}]*)}}", s)
O regex de dentro para fora:
[^}]
corresponde a qualquer coisa que "não seja"}
([^}]*)
corresponde a qualquer número de caracteres não} e agrupa-os
{{([^}]*)}}
coloca o acima dentro de chaves duplas
Sem os parênteses acima, re.findall
retornaria toda a correspondência (ou seja, ["{{is}}", "{{text}}"]
. No entanto, quando o regex contém um grupo, o findall irá usá-lo.
0 para a resposta № 5
Você pode usar uma expressão regular para corresponder a qualquer coisa que ocorra entre {{
e }}
. Será que isso funciona para você?
De um modo geral, para marcar certas strings em um grande corpo de texto, um árvore de sufixo será útil.