2010-08-13 9 views
10

में स्ट्रिंग से gsub ASCII कोड वर्ण कुछ HTML को स्क्रैप करने के लिए मैं नोकोगिरी का उपयोग कर रहा हूं। कुछ घटनाओं में, मैं कुछ अजीब पात्रों वापस हो रही है, मैं निम्नलिखित कोड के साथ इन पात्रों के लिए ASCII कोड नीचे नज़र रखी है:रूबी

@parser.leads[0].phone_numbers[0].each_byte do |c| 
    puts "char=#{c}" 
    end 

प्रश्न में पात्रों 194 की एक ASCII कोड और 160

है

मैं पार्सिंग के दौरान इन पात्रों को किसी भी तरह से बाहर करना चाहता हूं।

मैंने निम्नलिखित कोड का प्रयास किया है लेकिन यह काम नहीं करता है।

@parser.leads[0].phone_numbers[0].gsub(/160.chr/,'').gsub(/194.chr/,'') 

क्या कोई मुझे बता सकता है कि इसे कैसे प्राप्त किया जाए?

+0

आपको यह जांचना चाहिए कि पृष्ठ का एन्कोडिंग आपके तारों में से एक के अनुरूप है या नहीं। आप किस रूबी संस्करण का उपयोग कर रहे हैं? –

+0

मैं रूबी का उपयोग कर रहा हूं 1.8.7 – dagda1

उत्तर

6

ऊपर समाधान की कोशिश करते हुए, लेकिन एक अलग स्थिति के लिए तुम भी

s.gsub(/\xA0|\xC2/, '') 

या

s.delete 160.chr+194.chr 
+0

डिलीट फ़ंक्शन चाल करता है। धन्यवाद!! – dagda1

+5

यह: '' s.gsub (/ \ xA0 | \ xC2 /, '') '' 'सही नहीं है। आपको सबसे पहले भागने की आवश्यकता है: '' 's.gsub (/ \\ xA0 | \\ xC2 /, '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' | \ xC2/'' 'त्रुटि और यहां तक ​​कि यदि आप ऐसा करते हैं तो आपको मिलता है:' '' ArgumentError: UTF-8'' में अमान्य बाइट अनुक्रम। '' 'S.force_encoding (" BINARY ") आज़माएं। Gsub (0xA0.chr," ")' '' पहले के लिए और दूसरे के अनुसार तदनुसार बदलें। – Cacofonix

0

पहला विचार आपको जीएसबी का उपयोग करना चाहिए! gsub

gsub की बजाय एक स्ट्रिंग और gsub देता है! जगह

+0

मैं नहीं कहूंगा कि उसे * gsub का उपयोग करना चाहिए! संदर्भ जानने के बिना, यह अधिक उपयुक्त हो सकता है या यह जंगली अनुचित हो सकता है। – Chuck

+0

मैं सहमत होगा। मैं इस संदर्भ में सोच रहा था कि वह इसे एक और चर निर्दिष्ट नहीं कर रहा था। लेकिन आपका अधिकार गलत शब्द होना चाहिए। –

5

आपकी प्रतिस्थापन है कि आप एक विधि कॉल करना चाहते हैं लेकिन इसके बजाय आप Regexp बना रहे हैं। आप किसी भी चरित्र के बाद स्ट्रिंग "160" स्ट्रिंग और स्ट्रिंग "सीआर" के साथ स्ट्रिंग्स को बदल रहे हैं और फिर "160" को "1 9 4" के साथ बदलकर इसे कर रहे हैं।

इसके बजाय, gsub(160.chr, '') करें।

+0

यदि मैं उस कोड का उपयोग करता हूं तो मुझे निम्न त्रुटि मिलती है: RegexpError: नियमित अभिव्यक्ति का समयपूर्व अंत:// – dagda1

+0

मुझे लगता है कि ऐसा इसलिए है क्योंकि gsub (194.chr, '') एक गैर ASCII वर्ण को संदर्भित करता है। – dagda1

+0

@ dagda1: आप किस रूबी संस्करण का उपयोग कर रहे हैं? मुझे यह त्रुटि 1.8.7 या 1.9.1 में नहीं मिलती है। – Chuck

0

मैं हो रही थी "अवैध multibyte भागने" त्रुटि कोशिश कर सकते हैं। जब 99 99 से अधिक संख्या है तो Google वापस \ xA0 वापस था और मैं इसे हटाना चाहता था। तो मैंने जो किया वह return_value.gsub (/ [\ xA0]/n, "") का उपयोग किया गया था और इसके बजाय यह मेरे लिए बिल्कुल ठीक काम करता था।

7

मुझे स्ट्रिंग को "ट्रिमिंग" करते समय अदृश्य वर्णों को बाहर निकालने का प्रयास करते समय यह प्रश्न मिला।

s.strip मेरे लिए काम नहीं किया था और मैंने पाया है कि अदृश्य चरित्र ord संख्या तरीकों में से 194

कोई भी ऊपर मेरे लिए काम किया था, लेकिन उसके बाद मैंने पाया "Convert non-breaking spaces to spaces in Ruby" सवाल का कहना है जो:

Use /\u00a0/ to match non-breaking spaces: s.gsub(/\u00a0/, ' ') converts all non-breaking spaces to regular spaces

Use /[[:space:]]/ to match all whitespace, including Unicode whitespace like non-breaking spaces. This is unlike /\s/ , which matches only ASCII whitespace.

मुझे खुशी है कि मैंने पाया! अब मैं उपयोग कर रहा हूँ:

s.gsub(/[[:space:]]/,'') 

यह कैसे gsub विशिष्ट चरित्र कोड सवाल का जवाब नहीं है, लेकिन अगर आप सिर्फ सफेद स्थान को निकालना कोशिश कर रहे हैं यह बहुत अच्छी तरह से काम करने लगता है।

+0

यह एकमात्र उत्तर था जो रूबी 2.1.0 के रूप में मेरे लिए काम करता था। एक उथल-पुथल है! 's.gsub (/^[: space:] + $ /, '') 'हालांकि मेरे उद्देश्यों के लिए बेहतर काम किया। – TheLonelyGhost