1
votes

J'ai déclaré -> str1 = "bbccaa". Je veux que le résultat soit tous les b et a, c'est-à-dire 'bbaa', cependant

Je pratique actuellement les regex. J'ai déclaré -> str1 = "bbccaa" . Je veux que le résultat soit tous les b et a, c'est-à-dire «bbaa». J'ai essayé-> '[^ c] +', [ab] + Mais tout ce que j'ai essayé a finalement donné une sortie comme 'bb'. Quelqu'un peut-il me dire où je me trompe et aussi la solution, s'il vous plaît ??


7 commentaires

s = s.replace ('c', '') ? Qu'essayez-vous vraiment de faire?


Ou remplacez par une chaîne vide ne correspondant pas à a ou b [^ ab] +


J'ai déclaré str1 = "bbccaa", je voulais une sortie qui donne une sortie de tout sauf le 'c' c'est-à-dire une sortie qui est "bbaa". Comment écrire un regex qui me donne cette sortie ?? J'ai essayé d'utiliser -> [^ c] + et [ab] +. Mais ceux-ci ne m'ont pas donné les résultats souhaités. Ils ne m'ont donné que "bb".


Sauf le cc - re.sub (cc, replace_with_this, string_to_process)


Ah merci. Mais y a-t-il une expression que je pourrais écrire à l'intérieur de re.search ou re.match qui pourrait me donner cette même sortie?


Donc, le seul problème était que vous n’aviez trouvé qu’une seule correspondance avec re.search . Utilisez re.findall ou re.finditer pour faire correspondre toutes les correspondances.


Vous déclarez? Cela signifie-t-il que vous l'utilisez comme chaîne cible pour une expression régulière? Les nouveaux étudiants en regex ne sont généralement pas dans les détails de la correspondance des différentes parties d'une chaîne, mais puisque vous stipulez [ab] + , je dois supposer que vous comprenez les groupes de capture.


3 Réponses :


1
votes

Essayez ceci:

import re

s = "bbccaa"
print(re.sub("[^ab]+", r"", s))
#bbaa


3 commentaires

Ah merci. Mais y a-t-il une expression que je pourrais écrire à l'intérieur de re.search ou re.match qui pourrait me donner cette même sortie?


Vous devrez utiliser re.findall pour renvoyer plusieurs correspondances ...


OK, j'ai compris! Merci beaucoup :)



0
votes

Puisque nous pratiquons ici, une autre expression, pas la meilleure, serait:

([ab]+)|(.+?)

Démo


2 commentaires

re.search (([ab] +) | (. *?), str1) <- a fait cela. Mais je reçois toujours -> 'bb'


Un petit conseil, ne mettez jamais . *? comme dernière construction dans une regex. Cela ne correspondra jamais, jamais à un personnage. Par conséquent, le groupe 2 sera toujours soit NULL , soit la chaîne vide .



0
votes

J'utiliserais re.findall pour cela, puis join résultats de la manière suivante:

bbaa

Sortie:

XXX

Je ne vois pas moyen de le faire uniquement avec re (sans join)


1 commentaires

d'accord! Merci :)