Compte tenu d'une liste de chaînes: si je joins ces chaînes avec un Le résultat est (cas 0): 'string_a \ nstring_b \ nstring_c' code> p> et si j'imprime le résultat (cas 1): p> ['string_a', 'string_b', 'string_c'] code>
\ n code>:
p> p> string_a
string_b
string_c
3 Réponses :
Vous pouvez utiliser un '|' Pour ou donc: espère que cela aide! p> p>
Je préférerais trouver une méthode pour avoir les deux situations travaillant uniquement avec une regex uniquement. J'ai souvent simplifié la réégalité pour créer la question, de faire un motif pour chacun en ferait beaucoup plus compliqué que je pense.
Ne pas utiliser r em> préfixe pour la chaîne de regex. R dit à la février pour traiter le modèle comme une chaîne brute. p>
Utilisez 'string_b \ n. +' em> p>
sauf si un préfixe "R" ou "R" est présent, des séquences d'échappement dans les chaînes
sont interprétés selon des règles similaires à celles utilisées par la norme
C. Les séquences d'échappement reconnues sont: p>
Séquence d'échappement Signification Notes \ Newline ignorée \ Backslash
() \ 'Citation unique (') \ "double citation (") \ a
ASCII BLOCH (BEL) \ B ASCII BACKSPACE (BS) \ F ASCII
Formfeed (FF) \ N ASCII Linefeed (lf) \ n {nom} caractère nommé
Nom dans la base de données Unicode (Unicode uniquement) \ R ASCII
Retour (CR) \ T ASCII onglet horizontal (onglet) \ Uxxxx caractère
Avec une valeur hexagonale 16 bits xxxx (Unicode uniquement) \ uxxxxxxxxx personnage
avec une valeur hexagonale 32 bits xxxxxxxxx (Unicode uniquement) \ V ASCII vertical
Onglet (vt) \ ooo caractère avec valeur octale ooo \ xhh caractère avec
Valeur hexagonale HH P>
blockQuote>
Ça ne marche toujours pas. Je pense que le problème est dans la chaîne cible non dans la regex.
l=['a','s','c'] ''.join(list(i+'\n' for i in l ))) this is working well
Avez-vous essayé d'l'imprimer?
Imprimer ('\ N'.Join ([' string_a ',' string_b ',' string_c '])) code>
"Cela se produit parce que le \ n est considéré comme un personnage et non une nouvelle ligne." i> ...
\ n code> est b> un caractère, couramment rendue comme une nouvelle ligne. Chèque, à la place, les marqueurs de début de ligne et de fin de ligne dans les regexps, ceux qui peuvent aider
Votre chaîne ne peut pas vraiment être rendue comme
string_a \ nstring_b \ nstring_c code> sauf si le `\ \` a été échappé, c'est pourquoi
r'string_b \\ n. + ' Code> trouvera là-bas .
@Gphilo ça ne marche pas. J'ai essayé d'utiliser ^ (pour commencer) et $ (pour la fin) et cela ne correspond à aucun.
@mad_ Mais comment puis-je l'imprimer à une variable au lieu de l'imprimer à stdout?
@Gustavomaia
^ string_b \ n. + $ Code>? Ou voulez-vous toutes les lignes ci-dessous
string_b code>?
Vous pouvez utiliser une alternative ici:
string_b (?: \ N | \\ n). + Code> Voir Forked Regex101
Votre
'\ n'.join ([' string_a ',' string_b ',' string_c ']) code> fait ce que vous demandez dans le titre comme
' \ n ' code> est A Newline, LF, caractère B>.
@Kaddath Ça fonctionne bien, mais je reçois un autre problème: le texte réel que je souhaite trouver n'est pas toutes les lignes après
string_b code>, je ne fonctionne pas un motif et cela ne fonctionne pas
@ Wiktorstribiżew mais regex ne le voit pas comme une nouvelle ligne mais comme un caractère de chaîne
Newline est une chaîne. Regex jamais "voit" quoi que ce soit, il correspond à un texte avec un motif ou non, c'est tout. Si vous souhaitez faire correspondre une nouvelle ligne, utilisez une nouvelle ligne,
\ n code> dans la regex. C'est tout ce qu'il y a.
Méfiez-vous que le
. Code> dans votre dernier
. + Code> signifie
n'importe quel caractère, à l'exception des terminateurs de ligne CODE>, comme Regex101 stipule, c'est pourquoi vous n'obtenez pas eux, essayez avec
[\ s \ s] + code> à la place
@Kaddath C'est en fait ce que je fais Regex101.com/r/e1rnc6/2
Et puis pourquoi ne pas vous 1) Définir l'option Python et 2) utilisez le Code généré automatiquement ?
@ Wiktorstribiżew parce que cela ne fonctionne pas comme je veux que cela fonctionne. Le deuxième bloc de texte dans la liaison est le texte avec le
\ n code> et le résultat de celui-ci est différent du résultat du premier bloc de texte. Ce dont j'ai besoin, c'est le deuxième bloc d'avoir un résultat identique au premier bloc.
Et quelle est la façon dont vous voulez? Votre question et vos commentaires ne sont pas clairs. Fournir 1) une vraie chaîne littérale ou - meilleur - string littéral que vous souhaitez travailler avec, 2) Expliquez ce que vous devez faire correspondre à cette chaîne
@ Wiktorstribiżew malheureux je ne peux pas fournir la vraie chaîne. Désolé pour la confusion dans le premier lien. Ce dont j'ai besoin, c'est ces deux ( REGEX101.COM/R/fo2ad9/1 , REGEX101.COM/R/GCAVUC/1 ) Pour avoir le même résultat
Quel est le résultat? Quel résultat est correct? Ici - REGEX101.com/R/fo2ad9/1 ou - REGEX101.com/R/gCavuc/1 ici? Nous ne pouvons pas lire vos pensées.
Ceci est le bon Regex101.com/r/fo2ad9/1
Génial, il est clair maintenant. Utilisez
r'string: (((?: (?: \ N | \\ n) + \ d + [-.] (?: (?! \\ n).) *) +) " Code> ( Démo et Demo )