2012-06-21 2 views
0

Juste une autre question ... regexnégation chaîne .NET Regex

J'ai un projet pour remplacer tous les liens forts de ressources dans un des fichiers de projet C# avec des appels à notre nouveau système de traduction.

Pour les deux lignes suivantes, je n'ai besoin que du premier. Cela signifie que je souhaite exclure les appels ResourceManager.

Resources.SomeGlobalResxFile.SomeKey 
Resources.SomeGlobalResxFile.ResourceManager //mostly followed with GetString 

J'ai écrit l'expression rationnelle suivante, qui fonctionne bien, mais malheureusement, le ResourceManager inclut

//"Resources" must have no alfa or dot character before them -> [^\w\.] 
//The link is consisted of a global key (the first parenthesis linking 
//the RESX file) and the resource key 
[^\w\.]Resources\.(?<global_key>\w+)\.(?<key>\w+) 

Ce que je besoin (ou ce que je pense que je dois) est le négatif ... préanalyse ceux négatifs/lookaheads positifs/me donnent des maux de tête assertions arrières chaque fois que je me rends compte que j'ai besoin parce que je ne suis jamais sûr de savoir comment les placer correctement ... ou s'il est préférable d'utiliser un lookahed ou ... lookbehind

//still includes the ResourceManager 
[^\w\.]Resources\.(?!ResourceManager)(?<global_key>\w+)\.(?<key>\w+) 
[^\w\.]Resources\.(?<global_key>(?!ResourceManager)\w+)\.(?<key>\w+) 
+0

vous voulez obtenir que les chaînes qui ne sont pas 'ResourceManager' en eux? Si c'est le cas, vous pouvez utiliser la fonction 'String.Contains'. c'est-à-dire 'if (string.Contains (" ResourceManager ") == false) {...}' –

Répondre

1

Si je vous ai bien compris, vous faites tout ce qu'il faut, mais vous avez égaré le lookahead négatif. Il devrait être dans un key:

[^\w\.]Resources\.(?<global_key>\w+)\.(?!ResourceManager)(?<key>\w+) 
+0

Je suis un idiot. Bien sûr. Merci :) – Mirek

+0

@Motig pas de problème, bonne chance! ;) –

+1

Un lien rapide vers [Mastering Lookahead et Lookbehind] (http://www.rexegg.com/regex-lookarounds.html) pour ceux qui trébuchent sur ce point. –