2009-08-04 73 views

回答

7

要僅在「民」的屬性值,你可以這樣做重新編號:

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

但請注意,這隻會在.NET正則表達式的工作,這是正則表達式設計器使用。大多數正則表達式只允許lookbehinds匹配固定數量的字符。 Java的正則表達式允許可變長度的lookbehinds只要有一個明顯的最大長度,這樣你就可以僞造它通過使用{min,max}量詞的最大任意數量:

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

約翰·海蘭的正則表達式將在任何味道的工作支持lookbehinds。

編輯:我差點忘了;這裏是你如何做到這一點沒有向後看:

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

我喜歡這個最好純粹的美學原因。 :)

EDIT2:我忘了提,最後一個替換字符串是"$1,"

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

這就是說,如果你用這個數據在某些時候不是字符串任何東西,任何一種語言,你的工作中可能有格式化的數字輸出設備的工作。

+0

我應該用我的文字表達這種匹配?它在我前面提到的RegExp Designer應用程序中不起作用。你可以下載它並在其中播放,看它是否確實找到和替換? – 2009-08-04 16:21:08

+2

@Jeremy,您是否嘗試在正則表達式字段中放置`(?=(\ d \ d \ d)+(?!\ d))`,並且在替換表達式字段中放置了`,` ? – 2009-08-04 16:27:17