2009-12-30 3 views
0

J'essaie d'écrire un motif regex qui trouvera des nombres avec deux 00 premiers dans une chaîne et le remplacer par un seul 0. Le problème est que je veux ignorer les nombres entre parenthèses et je ne peux pas comprendre comment faire ceci.Comment trouver des nombres et en exclure entre parenthèses en utilisant regex

Par exemple, avec la chaîne:

Somewhere 001 (2009)

Je veux revenir:

Somewhere 01 (2009)

Je recherche en utilisant [00] pour trouver le premier 00, et remplacer avec 0 mais le problème est que (2009) devient (209) ce que je ne veux pas. Je pensais juste faire un remplacement sur (209) avec (2009) mais les cordes que j'essaye de corriger pourraient déjà avoir une valeur (209).

Toute aide serait appréciée!

Répondre

2

Rechercher un non chiffre (ou début de ligne) suivi de deux zéros suivis d'un ou plusieurs chiffres.

([^0-9]|^)00[0-9]+ 

si le nombre a trois zéros? Combien de zéros voulez-vous avoir après le remplacement? Si vous voulez attraper tous les zéros et les remplacer par un seul:

([^0-9]|^)00+[0-9]+ 
+0

Merci! Avec une correction mineure, j'ai eu ce dont j'avais besoin. Je n'ai pas pensé à utiliser l'espace dans le cadre de la recherche. Je suppose qu'il est trop facile de manquer l'évidence. Au cas où quelqu'un en aurait besoin, le motif regex que j'ai utilisé pour trouver le 00 est ([^ 0-9] | ^) 00. –

+1

Ceci n'ignore pas les nombres entre parenthèses. Il échoue pour "(0002)" – noah

+0

Vous pouvez ignorer l'espace en utilisant les jetons de remplacement. Pour ce faire, vous ajoutez un groupe de capture supplémentaire. Voici le C# oneliner: yourString = Regex.Replace (votreString, "([^ 0-9] | ^) 00 + ([0-9] +)", "$ 10 $ 2"); – tyshock

0
?Regex.Replace("Somewhere 001 (2009)", " 00([0-9]+) ", " 0$1 ") 
"Somewhere 01 (2009)" 
1

Idéalement, vous utiliseriez regard négatif derrière, mais votre moteur de regex ne pouvez pas le supporter. Voici ce que je ferais en JavaScript:

string.replace(/(^|[^(\d])00+/g,"$10"); 

qui remplacera une chaîne de zéros qui ne sont pas précédés par parenthèse ou un autre chiffre. Modifiez la classe de caractères à [^(\d.] si vous travaillez également avec des nombres décimaux.

+0

C'est l'approche la plus propre. – tyshock

Questions connexes