2015-09-21 4 views
1

im essayant de le faire pendant 5 heures im désespérée im gonna se fâcher. s'il vous plaît helpme.regex.matches notmatching

var start = new List<string>() {"Report", "Audit" , "Committee" } ; 
string expresss= start[0] + @"(.*?)\n{0,1}(.*?)" + start[1] + @"(.*)$"; 
MatchCollection matches = Regex.Matches(text, "(?im)"+ expresss); 

ce code ne parvient pas à trouver "" RAPPORT DE LA VÉRIFICATION COMITÉ ""

enter image description here

mais ici wit regex text3 sublime ICAN trouver.

enter image description here

s'il vous plaît aidez-moi à trouver "" RAPPORT DE LA VÉRIFICATION COMITÉ "" via C# code regex. merci.

+1

Ce n'est pas quelque chose d'aussi simple que le cas, est-il? – Flynn1179

+0

Où créez-vous la variable 'text'? – Sybren

+0

Cela peut être à cause de linbreak: utilisez '\ r? \ N'. Essayez 'chaîne express = début [0] + @" (. *?) \ R? \ N {0,1} (. *?) "+ Début [1] + @" (. *) $ ";' –

Répondre

1

On dirait que c'est à la fois le fait qu'il est sensible à la casse, et que vous ne correspond pas à une expression régulière sur plusieurs lignes (grâce à @stribizhev pour spotting).

Utilisation:

MatchCollection matches = Regex.Matches(text, "(?im)"+ expresss, 
    RegexOptions.Multiline | RegexOptions.IgnoreCase); 

Je ne peux pas dire du contexte, mais il pourrait être utile d'examiner également si l'utilisation RegexOptions.CultureInvariant est également appropriée.

EDIT: Ok, je ne savais pas C# pourrait utiliser (im?) Pour le cas + correspondant à plusieurs lignes. Dans ce cas, ne savez pas comment cela a fonctionné pour vous, si (? Im) n'a pas fonctionné. J'ai juste pris les options de mon test, en laissant le (? Im) et il a fait correspondre.

+0

'(?) '=' RegexOptions.Multiline | RegexOptions.IgnoreCase' –

+1

'(? Im)' ne fonctionne pas dans .NET, Flynn a raison de le spécifier comme paramètre pour les correspondances. –

+0

en fait je nouveau il était lié à multiline. mais je ne pouvais pas comprendre. –