2009-11-13 16 views
0

En utilisant regex (en C# .net) est-il possible de vérifier la ligne précédente d'une chaîne?Regex vérifier la ligne précédente

Par exemple, je dois sélectionner les chaînes dans lequel la ligne précédente n'est pas une série d'astérisques (prev ligne: ******)

+0

Que se passe-t-il s'il y a deux lignes dans la ligne qui ne contiennent que des astérisques? Voulez-vous sélectionner le premier? –

Répondre

1

Vous pouvez utiliser RegexOptions.MultiLine puis correspondre à quelque chose comme ce qui suit:

(?<!^\*+$\r?\n?.*)foo 

Ceci ne correspond à "foo" que si la ligne précédente n'est pas composée d'astérisques.

5
(?m)^(?<!^\*+\r?\n).+ 

(?m) active le mode multiligne si ^ peut correspondre au début d'une ligne. Le lookbehind vérifie la ligne précédente; si elle réussit (c'est-à-dire ne voit pas voir une ligne d'astérisques), .+ consomme la ligne en cours.

+0

+1 pour expliquer réellement l'expression rationnelle. – exhuma

+0

Les anciens Mac utilisent simplement '\ r' pour un retour à la ligne. Peut-être que le \ n devrait être optionnel? –

+0

Ils ne peuvent pas être tous deux facultatifs; Pour correspondre exactement à l'un des trois types de séparateurs, vous avez besoin de quelque chose comme '\ r? \ n | \ r'. Je suppose que nous devrions continuer à le faire de cette façon, mais je ne voyais presque jamais dans la nature avant même qu'ils aient fait le changement. –

Questions connexes