2009-02-09 20 views
7

क्या एक स्ट्रिंग से सभी विशेष वर्ण दूर करने के लिए सबसे अच्छा तरीका है - इस तरह की:स्ट्रिंग से nonnumeric और nonalpha अक्षर को हटा रहा है?

@ # $%^& *() {} |:?। "> <, /, '[] \ = -

इन पात्रों से हटाया नहीं बल्कि कम होगा, तो यह बेहतर होगा प्रत्येक पर regex का उपयोग करने के लिए या सिर्फ होने आइटम स्ट्रिंग परिवर्तन का उपयोग

Thx

पर्यावरण == सी #/नेट

?।

उत्तर

3
php में

:

$tests = array(
    'hello, world!' 
    ,'this is a test' 
    ,'and so is this' 
    ,'another test with /slashes/ & (parenthesis)' 
    ,'l3375p34k stinks' 
); 

function strip_non_alphanumerics($subject) 
{ 
    return preg_replace('/[^a-z0-9]/i', '', $subject); 
} 

foreach($tests as $test) 
{ 
    printf("%s\n", strip_non_alphanumerics($test)); 
} 

उत्पादन होगा:

helloworld 
thisisatest 
andsoisthis 
anothertestwithslashesparenthesis 
l3375p34kstinks 
+0

मैं पूंजी अक्षरों के साथ कुछ परीक्षण मामलों को जोड़ सकता हूं। –

+0

@jm: यह भी एक अच्छी बात है, मैं किसी भी टाइप करने के लिए बहुत आलसी था और रेगेक्स के बाद "i" रेगेक्स केस-असंवेदनशील बनाता है;) – Kris

+0

पीएस यदि प्रश्न अब पर्यावरण को .NET होने के लिए कहता है तो यह स्वीकार्य उत्तर क्यों है? (मुझे नहीं लगता कि मैंने जवाब दिया था)। उदाहरण सी # के लिए यह बहुत ही वैचारिक रूप से अलग नहीं होगा, लेकिन ऐसा कुछ नहीं दिखता है। – Kris

0

हमें "tr" कमांड?

आप यह नहीं कहते कि आप किस माहौल में हैं ... खोल? सी कार्यक्रम? जावा? उनमें से प्रत्येक के पास अलग-अलग सर्वोत्तम समाधान होंगे।

6

आमतौर पर ब्लैकलिस्ट की तुलना में श्वेतसूची होना बेहतर होता है।

रेगेक्स में सुविधाजनक \w है, जिसका प्रभावी ढंग से अल्फान्यूमेरिक प्लस अंडरस्कोर का अर्थ है (कुछ प्रकारों में सूची में उच्चारण किए गए वर्ण (á, é, ô, आदि) भी शामिल हैं, अन्य नहीं)।

आप \W का उपयोग करके उस सब कुछ का अर्थ कर सकते हैं जो अल्फान्यूमेरिक नहीं है।

तो \W को खाली स्ट्रिंग के साथ सभी 'विशेष' वर्णों को हटा देगा।


वैकल्पिक रूप से, अगर आप अक्षरांकीय वर्णों का एक अलग सेट की जरूरत है, तो आप एक नकार चरित्र वर्ग का उपयोग कर सकते हैं: [^abc] सब कुछ है कि a या b या c, और [^a-z] सब कुछ से मेल खाएगी नहीं है से मेल खाएगी उस श्रेणी a,b,c,d...x,y,z

-\w[A-Za-z0-9_] है बराबर में नहीं है और इस प्रकार \W[^A-Za-z0-9_]

है
0

आप किस भाषा में रेगेक्स जा रहे हैं?

उदाहरण के लिए

, पर्ल में आप एक अनुवाद जो अपनी सूची में कुछ भी नहीं में वर्ण के किसी भी अनुवाद होगा कर सकते हैं:

उदा यह अनुवाद करेगा 'एक', 'बी', 'सी' या 'प' में ''

$sentence =~ tr/abcd//; 
2

मैं regex पसंद करते हैं क्योंकि वाक्य रचना सरल है पढ़ सकते हैं और बनाए रखने के लिए:

# in Python 
import re 
re.sub("[abcdef]", "", text) 

जहां abcdefहटाए जाने के लिए वर्णों से ठीक से बच निकले हैं।

वैकल्पिक रूप से, अगर आप केवल अक्षरांकीय वर्णों (प्लस अंडरस्कोर) चाहते हैं, आप इस्तेमाल कर सकते हैं:

re.sub("\W", "", text) 

जहां \W एक गैर शब्द चरित्र, अर्थात [^a-zA-Z_0-9] प्रतिनिधित्व करता है।

1

तुम सिर्फ अल्फान्यूमेरिक अक्षर ही करना चाहते हैं, तो आप सिर्फ इस उलटे चरित्र वर्ग का उपयोग करके व्यक्त कर सकते हैं:

[^A-Za-z0-9]+ 

इसका मतलब यह है: हर चरित्र है कि अक्षरांकीय नहीं है।

+0

काफी नहीं, आप ए-जेड भूल गए हैं :) – Robert

+0

इसे \ w – UnkwnTech

+0

\ w के लिए सरलीकृत किया जा सकता है [ए-ज़ा-जे 0-9_] और मुझे यकीन नहीं है कि वह कम लाइन भी चाहता है। – Gumbo

1

यहाँ एक सरल regex

[^\w] 

यह सब गैर शब्द अक्षर के इस AZ 0 az अनुमति देगा पकड़ने चाहिए -9 स्पेस और _ न तो स्पेस और न ही आपकी सूची में थे इसलिए यह काम करता है अगर आप इन्हें पकड़ना चाहते थे तो मैं somethi एनजी इस तरह:

/[a-z0-90/i 

इस और a-z के लिए पीएचपी प्रारूप 0-9 मैं इसे केस-संवेदी बना देता है।

+0

यह गलत है। \ w * नहीं * अंतरिक्ष शामिल है। यह "\ W" के बजाय "[^ \ w]" करने के लिए भी अत्यधिक जटिल है। और आपकी दूसरी अभिव्यक्ति काम नहीं करेगी - यह बंद ब्रैकेट के स्थान पर शून्य है। यह एक PHP-विशिष्ट प्रारूप भी नहीं है, यह कई अलग-अलग रूपों के लिए काम करता है। –

0

आप उन्हें पात्रों में कुंजी के पूछे जाने वाले मूल्य प्राप्त करके फ्रंटएंड पर मान्य कर सकते हैं।

0

PHP में आदर्श दृष्टिकोण होगा ...

$text = "ABCDEF...Á123"; 
$text = preg_replace('/[^\p{L}]/i', '', $text); 
print($text); # Output: ABCDEFÁ 

या, पर्ल में ...

my $text = "ABCDEF...Á123"; 
$text =~ s/[^\p{L}]//gi; 
print($text); # Output: ABCDEFÁ 

आप बस पर से मेल खाते हैं [^ a-zA-Z], आप सभी उच्चारण वर्णों को याद करेंगे, जो (अधिकांश भाग के लिए), मुझे लगता है कि आप बनाए रखना चाहते हैं।

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