Voici un exemple de chaîne:
text = "bonjour, j'aime manger des 'sandwichs' au bœuf et des 'galettes' de bœuf séché et de poulet et des 'hamburgers' de poulet et aussi des 'doigts' de poulet et d'autres 'viande' de poulet aussi." < / code>
J'essaie de séparer les mots "galettes", "hamburgers", doigts "et" viande "de ce texte. Je souhaite séparer les mots après le poulet mais avant la citation finale.
Je suis resté perplexe sur la façon d'en séparer un seul. Je peux me séparer après "poulet"
, mais comment puis-je sélectionner le texte jusqu'au prochain '
?
Je voudrais parcourir une liste pour enregistrer les variables dans un tableau. Merci pour toute aide que vous pouvez fournir.
4 Réponses :
Vous pouvez utiliser des expressions régulières:
['patties', 'burgers', 'fingers', 'meat']
Sorties:
import re text = "hello, i like to eat beef 'sandwiches' and beef 'jerky' and chicken 'patties' and chicken 'burgers' and also chicken 'fingers' and other chicken 'meat' too." match = re.findall(r'chicken \'(\S+)\'', text) print (match)
Regex a également été ma première pensée, on dirait que tu m'as battu. C'est une bonne solution.
Juste ce que j'étais en stock. J'essayais des expressions régulières, mais j'étais perplexe sur la façon exacte de le faire. Merci
Les expressions régulières peuvent être décourageantes au début, mais la bonne nouvelle est qu'il existe de nombreuses ressources. Ce est un cours gratuit sur les expressions régulières que je peux recommander (il utilise cependant javascript).
C'est un bon cas d'utilisation de l'expression régulière.
import re print(re.findall(r"chicken '(.*?)'", text))
Voici une explication de l'expression régulière: https://regex101.com/r/8IdseD/1
Voici le code python en cours d'exécution: https://repl.it/repls/SquareQuerulousModes
L'expression régulière, partie par partie:
chicken '
- correspond à ce texte littéral (
- démarre un groupe de capture - la partie que re.findall
crachera. .
- correspond à n'importe quel caractère ... *?
- ... autant de fois que possible, mais le moins possible (ceci pour éviter de capturer le '
final) )
- terminer le groupe de capture '
- correspond à un '
littéral. Donc, re.findall
vous donnera une liste de toutes les sous-chaînes capturées dans le groupe.
Merci beaucoup. Exactement ce sur quoi j'étais coincé.
Vous pouvez utiliser des lookarounds de largeur nulle pour correspondre à l'environnement:
In [713]: text = "hello, i like to eat beef 'sandwiches' and beef 'jerky' and chicken 'patties' and chicken 'burgers' and also chicken 'fingers' and other chicken 'meat' too." In [714]: re.findall(r"(?<=chicken\s')[^']+(?=')", text) Out[714]: ['patties', 'burgers', 'fingers', 'meat']
(? est un regard positif de largeur zéro qui correspond à poulet'
[^ '] +
correspond à la partie jusqu'au prochain guillemet simple, c'est-à-dire la sous-chaîne souhaitée
(? = ')
est une anticipation positive de largeur nulle qui correspond à '
après la sous-chaîne souhaitée
(?<=chicken\s')[^']+(?=')
Sélectionnez uniquement la partie de la phrase de la première occurrence de "poulet":
for word in chicken_words: if word[0] == "'" and word[-1] == "'": print word[1:-1]
Divisez ce texte sur des espaces:
chicken_words = chicken_text.split(" ")
Parcourez la liste des mots qui commencent et se terminent par un guillemet simple:
chicken_text = text[text.find("chicken"):]
Cela ne fonctionnera pas si les mots entre guillemets contiennent eux-mêmes des espaces, mais ce n'est pas le cas le cas dans l'exemple de texte que vous avez donné.
Il vous manque les parenthèses dans la dernière ligne, print word [1: -1]
doit être print (word [1: -1])
@IsmaelPadilla Cette question n'a pas été balisée python3.
Tu as raison, mon mauvais! Je suis habitué à utiliser python3, donc utiliser print sans parenthèses ne me semblait pas correct. Pardon!
Veuillez ajouter votre code ici.