2011-08-22 9 views
5

कभी-कभी मेरे पास अजीब पात्रों के साथ एक तार होता है। वे ब्राउज़र में दिखाई नहीं दे रहे हैं, लेकिन स्ट्रिंग का हिस्सा हैं और लेन() में गिने जाते हैं। मैं इससे कैसे छुटकारा पा सकता हूं? पट्टी() सामान्य जगह हटा देती है लेकिन संकेत नहीं।पायथन - स्ट्रिंग से छिपे हुए संकेतों को कैसे हटाएं?

+0

इस समाधान देखें: http://stackoverflow.com/questions/92438/stripping-non-printable-characters-from-a-string-in-python –

उत्तर

2

वर्ण जिन्हें आप सक्षम हैं और इस

import re 
text = re.sub("[^a-z0-9]+","", text, flags=re.IGNORECASE)

की तरह बाकी दूर करने के लिए यह करने के लिए जेड z, A के लिए किसी भी एक के अलावा अन्य पात्रों को हटा देगा चाहते हैं कलेक्ट सेट और 0 9 को

+0

मैं पूरी UTF8 संकेत सेट की जरूरत है:/ – robos85

+0

@ robos85, आप स्ट्रिप करने या पट्टी न करने के लिए कुछ जानकारी चाहिए। तो क्या मुझे लगता है कि आपको utf8 के लिए सभी अमान्य वर्णों को पट्टी करने की आवश्यकता है? इसके लिए एक समाधान है, लेकिन इसमें अदृश्य/गैर-प्रिंट करने योग्य वर्ण शामिल हो सकते हैं। – YOU

11

उपयोग string मॉड्यूल से वर्ण श्रेणियां। इसके अलावा

new_string = re.sub("[^{}]+".format(printable), "", the_string) 

, अगर आप के सभी पात्रों पर देखना चाहते हैं: आप सभी प्रिंट करने योग्य पात्रों की अनुमति देना चाहते हैं, तो आप आप के जवाब पर

from string import printable 
new_string = ''.join(char for char in the_string if char in printable) 

भवन कर सकते हैं, तो आप इस re.sub साथ भी कर सकते हैं एक स्ट्रिंग, यहां तक ​​कि गंदा लोगों, आप हमेशा

print repr(the_string) 

जो अमुद्रणीय वर्णों के लिए \x00 तरह बातें दिखाएगा कर सकते हैं।

+0

निश्चित रूप से यह सही जवाब है। – dotancohen

+0

सेकंड्स उत्तर आकर्षण की तरह काम किया, धन्यवाद। – Yehonatan

1

नियमित अभिव्यक्ति सभी प्रकार के स्ट्रिंग विश्लेषण के लिए एक अच्छा और बहुत सार्वभौमिक उपकरण है। यदि गति एक मुद्दा है, तो स्ट्रिंग क्लास से "अनुवाद" विधि भी आपकी मदद कर सकती है।

सबसे पहले आप एक ('पहचान') मानचित्रण परिभाषित है, जो कुछ भी नहीं बदलेगा:

mapping = map(chr, range(256)) 

अगर आप प्रत्येक "एक" एक "बी" से, आप अपने मानचित्रण संशोधित बदलना चाहते हैं

mapping[ord('a')] = 'b' 

अब आप "का अनुवाद" विधि के लिए तालिका का निर्माण:

table = "".join(mapping) 

और

print "abc".translate(table) 

प्रिंट "बीबीसी"।

तुम सच में "एक" को हटाना चाहते हैं, तो आप इसके बाद के संस्करण मानचित्रण को संशोधित नहीं है, तालिका का निर्माण और उसके बाद फोन इस प्रकार का अनुवाद:

print "abc".translate(table, "a") 

आप "ई.पू." देता है।

तालिका बनने के बाद, अनुवाद विधि बहुत तेज है।

तो आपके मामले में आप मानचित्रण संशोधित ऐसी है कि अपने सभी अवांछित पात्रों एक खाली स्थान के

mapping = map(chr, range(256)) 
table = "".join(" " if c in unwanted_chars else c for c in map(chr, range(256))) 

किया जाता है और len("my string".translate(table).trim()) जो शुरुआत में अवांछित पात्रों और स्ट्रिंग के अंत पर ध्यान नहीं देता उपयोग कर सकते हैं।

या आप len("my string".translate(table, unwanted_chars)) का उपयोग करते हैं जो आपके सभी अवांछित पात्रों को अनदेखा कर देगा।

+0

अच्छा। कल +1 जब मेरे पास फिर से वोट हैं। मैंने अनुवाद के बारे में सोचा लेकिन वाक्यविन्यास को देखने के लिए बहुत आलसी था। – agf

संबंधित मुद्दे