2009-08-04 4 views

Répondre

7

reformater chiffres seulement dans « num » attribut Les valeurs peuvent faire:

(?<=num='\d+)(?=(?:\d{3})+(?!\d)) 

Mais notez que cela ne fonctionnera que dans regexes .NET, qui est ce que RegExp Designer utilise. La plupart des arômes regex n'autorisent que les lookbehinds correspondant à un nombre fixe de caractères. Java regexes permettent d'assertions arrières de longueur variable aussi longtemps que il y a une longueur maximale évidente, de sorte que vous pouvez truquer en utilisant {min,max} quantificateurs un nombre arbitraire pour le maximum:

(?<=num='\d{1,20})(?=(?:\d{3})+(?!\d)) 

regex John Hyland travaillera en saveur que les supports lookbehinds.

EDIT: J'ai presque oublié; voici comment vous pouvez le faire sans lookbehinds:

(num='\d{1,3}|\G\d{3})(?=(?:\d{3})+(?!\d)) 

Je préfère celui-ci pour des raisons purement esthétiques. :)

EDIT2: J'ai oublié de mentionner que la chaîne de remplacement pour le dernier est "$1,"

+0

Mes données: 50000 - Je ne veux pas convertir le numéro 50000, seul le numéro 12345678. Comment puis-je faire ceci? –

+0

Avez-vous essayé l'expression rationnelle dans cette réponse? Ça marche pour moi. –

5
s/(?<=\d)(?=(\d\d\d)+(?!\d))/,/g 

Cela dit, si vous travaillez avec ces données comme autre chose que des chaînes à un moment donné, quelle que soit la langue que vous travaillez dans a probablement des installations pour le formatage de sortie numérique.

+0

Dois-je correspondre à cette expression avec mon texte? Cela ne fonctionne pas dans l'application RegExp Designer dont j'ai parlé plus tôt. Pourriez-vous le télécharger et jouer à l'intérieur pour voir si elle fait la recherche et le remplacement? –

+2

@Jeremy, avez-vous essayé de mettre '(? <= \ D) (? = (\ D \ d \ d) + (?! \ D))' dans le champ Expression régulière et ',' dans le champ Remplacer l'expression ? –

+0

Excellent! Je vous remercie. Une grande partie de cela va au-dessus de ma tête! –