Je veux trouver des mots qui apparaissent après un mot clé (spécifié et recherché par moi) et imprimer le résultat. Je sais que je suis censé utiliser regex pour le faire, et je l'ai aussi essayé, comme ceci:
import re
s = "hi my name is ryan, and i am new to python and would like to learn more"
m = re.search("^name: (\w+)", s)
print m.groups()
La sortie est juste:
"is"
Mais je veux obtenir tous les mots et les ponctuations qui suivent le mot "nom".
Au lieu d'utiliser des expressions rationnelles, vous pouvez simplement (par exemple) séparer votre chaîne avec str.partition(separator)
comme ceci:
mystring = "hi my name is ryan, and i am new to python and would like to learn more"
keyword = 'name'
befor_keyowrd, keyword, after_keyword = mystring.partition(keyword)
# before_keyword = 'hi my '
# keyword = name
# after_keyword = ' is ryan, and i am new to python and would like to learn more'
Vous devez toutefois gérer les espaces blancs inutiles séparément.
Votre exemple ne fonctionnera pas, mais si je comprends bien l’idée:
regexp = re.compile("name(.*)$")
print regexp.search(s).group(1)
# prints " is ryan, and i am new to python and would like to learn more"
Ceci imprimera tout après "nom" et jusqu'à la fin de la ligne.
Une autre alternative ...
import re
m = re.search('(?<=name)(.*)', s)
print m.groups()
Au lieu de "^name: (\w+)"
, utilisez:
"^name:(.*)"
Ce que vous avez utilisé concernant votre sortie:
re.search("name (\w+)", s)
Ce que vous devez utiliser ( correspond à tous ):
re.search("name (.*)", s)
Vous pourriez simplement faire
s = "hi my name is ryan, and i am new to python and would like to learn more"
s.split('name')
Cela divisera votre chaîne et renverra une liste comme celle-ci ['salut mon', 'est ryan, et je suis nouveau sur python et j'aimerais en savoir plus']
en fonction de ce que vous voulez faire, cela peut aider ou non.
import re
s = "hi my name is ryan, and i am new to python and would like to learn more"
m = re.search("^name: (\w+)", s)
print m.group(1)
Cela fonctionnera pour u: nom de travail\s\w +\s (\ w +)
>>> s = 'hi my name is ryan, and i am new to python and would like to learn more'
>>> m = re.search('name\s\w+\s(\w+)',s)
>>> m.group(0)
'name is ryan'
>>>> m.group(1)
'ryan'
Sans utiliser regex, vous pouvez
supprimer la ponctuation (envisager de tout mettre en majuscule, y compris le terme de recherche)
diviser votre texte en mots individuels
trouver l'index du mot recherché
obtenir Word du tableau (index + 1
pour Word après, index - 1
pour Word avant)
Extrait de code:
import string
s = 'hi my name is ryan, and i am new to python and would like to learn more'
t = 'name'
i = s.translate(string.maketrans("",""), string.punctuation).split().index(t)
print s.split()[i+1]
>> is
Pour plusieurs occurrences, vous devez enregistrer plusieurs index:
import string
s = 'hi my NAME is ryan, and i am new to NAME python and would like to learn more'
t = 'NAME'
il = [i for i, x in enumerate(s.translate(string.maketrans("",""), string.punctuation).split()) if x == t]
print [s.split()[x+1] for x in il]
>> ['is', 'python']