.net - Auto-converting numbers to comma-fied versions -


निम्न पाठ को देखते हुए

 / feeds / tag / remote-desktop 1320 17007 22449240 / फीड / टैग / टर्मिनल सर्वर 1328 15805 20989040 / foo / 23,211 / परीक्षण 1490 11341 16,898,090 

मान लीजिए कि हम, उनके कॉमा-fied रूपों के लिए उन संख्याओं को परिवर्तित करने के लिए इतना

 / फीड की तरह चाहते हैं / टैग / रिमोट डेस्कटॉप 1,320 17,007 22,449,240 / फीड / टैग / टर्मिनल सर्वर 1,328 15,805 20,989,040 / foo / 23,211 / परीक्षण 1,490 11,341 16,898,090 

(निश्चित-चौड़ाई ASCII रिक्ति ठीक करने के बारे में चिंता मत करो, कि एक और दिन के लिए एक समस्या)

यह सबसे अच्छा regex मैं के साथ आ सकता है; यह Regex निंजा स्टीवन लेविथन से पर आधारित है:?!

  लौट Regex.Replace (रों, "@ \ b (& lt; \ /) \ घ {4,} \ ख (& lt;? ! \ /) ", प्रतिनिधि (मैच मैच) {स्ट्रिंग आउटपुट =" "; स्ट्रिंग एम = मैच.वैलू; int len ​​= match.Length; for (int i = len-1; i & gt; = 0; i-- ) (आउटपुट = एम [आई] + आउटपुट; अगर ((लेन-आई)% 3 == 0) आउटपुट = "," + आउटपुट;} यदि (आउटपुट। तारों (",")) आउटपुट = आउटपुट। 1, आउटपुट। लांघ -1); वापसी आउटपुट;});  

में, वहाँ एक बहुत चालाक संख्या अल्पविराम प्रविष्टि regex प्रस्तावित:

  पाठ = Regex.Replace (पाठ, @ "(& lt; = \ D) (<== (\ d {3}) + $) ",", ")  

हालांकि इसके लिए एक अंत एंकर $ , जैसा कि आप देख सकते हैं, मेरे पास इसके ऊपर के पाठ में नहीं है - बाकी पाठ में "फ़्लोटिंग" संख्याएं हैं।

मुझे संदेह है कि एक मेरे समाधान से ऐसा करने का क्लीनर तरीका है? यह लिखने के बाद, मुझे एहसास हुआ कि मैं उन्हें जोड़ सकता हूं, और एक रेगेक्स को दूसरे के अंदर रख सकता हूं, जैसे:

  वापसी Regex। (S, @ "\ b (? & Lt;! \ /) \ D {4,} \ b (? & Lt;! / /)", प्रतिनिधि (मैच मैच) {वापसी Regex.Replace (match.Value, @ " (? & Lt; = \ d) (? = (\ D {3}) + $) ",", ");});  

मैं उन सिद्धांतों के साथ सहमत हूँ जो सुझाव देते हैं कि आप अंतर्निहित। NET स्वरूपण का उपयोग करते हैं सुविधा यदि संभव हो तो

हालांकि, यदि आपकी संख्या मनमाने ढंग से बड़ी हो सकती है, तो ऐसा कुछ कार्य करना चाहिए:

  int len ​​= match.Length; इंट संख्याकॉमस = (लेन-1) / 3; StringBuilder sb = नए StringBuilder (match.Value, लेन + numCommas) (i = 1 int i; मैं & lt; = numCommas; i ++) {sb.Insert (लेन - मैं * 3, ','); } वापसी sb.ToString ()  

इसके अलावा, अगर आप किसी भी कारण से Regex.Replace के प्रयोग पर जोर देते हैं, आप Regex है कि आप प्रश्न में सूचीबद्ध ठीक कर सकते हैं अंत एंकर समस्या से बचने के लिए उदाहरण के लिए, मुझे लगता है कि

  Regex.Replace (text, @ "(? & Lt; = \ d) (? = (\ D {3}) + (\ s | $)) ",", ")  

आपके उदाहरण में काम करेगा क्योंकि आप जिन संख्याओं को" कॉमा-फै "चाहते हैं वे सभी रिक्त स्थान या रेखा के अंत के बाद हैं।

< / div>

Comments

Popular posts from this blog

c# - ListView onScroll event -

PHP - get image from byte array -

Linux Terminal Problem with Non-Canonical Terminal I/O app -