2009-07-30 6 views
1

J'ai une réponse:Regex Exclure caractères Groupe

 
MS1:111980613994 
124 MS2:222980613994124 

je le regex suivant:

MS\d:(\d(?:\r?\n?)){15} 

Selon Regex, la partie "(?:\r?\n?)" faut le laisser match pour le groupe, mais exclure de la capture (donc j'obtiens une valeur contiguë du groupe).

Le problème est que pour "MS1:xxx" il correspond à la [CR][LF] et l'inclut dans le groupe. Il devrait être exclu de la capture ...

Aide s'il vous plaît.

+1

Vous devez indiquer ce que la mise en œuvre de regex correspondant que vous utilisez (par exemple, Perl, PCRE, PHP, JavaScript, .Net, etc.) –

+0

1 question utile, grâce –

Répondre

0

Peut-être ce que vous voulez faire ici est de placer le [CR] [LF] partie correspondant à l'extérieur du groupe capturé, quelque chose comme: MS\d:(\d){15}(?:\r?\n?)

+0

À moins possible être des sauts de ligne dispersés à travers les 15 chiffres. En outre, vous n'avez vraiment pas besoin de regroupement sur les nouvelles lignes dans ce cas. –

4

Non, la syntaxe (?:...) signifie simplement que ce groupe (paire de parens) ne sont pas eux-mêmes un groupe de capture. Si elles sont entourées d'un autre groupe de capture, le groupe de capture englobera les caractères correspondant au groupe non capturant.

Si vous voulez vraiment ignorer les \r s et les \n s, il est préférable de les supprimer dans un deuxième temps. Vous ne dites pas ce que la langue que vous utilisez, mais quelque chose d'équivalent à ce (Python) devrait fonctionner:

s = re.sub(r'[\r\n]', '', s) 
-1

Que diriez-vous MS\d:(?:(\d)\r?\n?){15}

+0

Parens inégalée dans le motif, FYI. – DWright

Questions connexes