Perl: स्ट्रिंग ट्रिम अग्रणी और अनुगामी व्हाट्सएप को कार्य करने के लिए


82

क्या व्हाट्सएप को अग्रणी और अनुगामी बनाने के लिए एक अंतर्निहित कार्य है trim(" hello world ") eq "hello world"?


3
FYI करें: पर्ल की स्ट्रिंग समानता ऑपरेटर द्वारा परीक्षण की जाती है eq
ए। रेक्स

5
आपके द्वारा प्राप्त सभी asnwers पर थोड़ा स्पष्टीकरण: s/^\s+|\s+$//g;बनाम s/^\s*//; s/\s*$//;बाद वाला ऐसा करने के लिए (कभी-कभी थोड़ा) अधिक मुहावरेदार तरीका है, क्योंकि रेगेक्स इंजन को शुरू करना वास्तव में इस मामले में प्रत्यावर्तन से अधिक तेज है। आप इसके बारे में जेफरी फ्रीडल के मास्टरींग रेगुलर एक्सप्रेशंस पर अधिक पढ़ सकते हैं। (जब तक कि यह पर्ल के कुछ नए संस्करण में तय नहीं किया गया था, उस स्थिति में कोई मुझे सही करे!)
हुगामिर

4
एक जावा और .NET बैकग्राउंड से आते हुए, मैं लगभग हैरान हूँ कि यह भाषा में नहीं बनाया गया है! सबको शुक्रीया!
लैंडन कुह्न

3
@ landon9720, यह कुछ हद तक है: स्केलर :: यूटील ट्रिम है, और 5.7.3 के बाद से कोर है - यह 2002 है!
हुगमेइर

3
हुगमीर, यह गलत है, ईथर का जवाब देखें
daxim

जवाबों:


89

यहाँ एक नियमित अभिव्यक्ति का उपयोग कर एक दृष्टिकोण है:

$string =~ s/^\s+|\s+$//g ;     # remove both leading and trailing whitespace

पर्ल 6 में एक ट्रिम फ़ंक्शन शामिल होगा:

$string .= trim;

स्रोत: विकिपीडिया


5
मैं इसे महीने में एक बार देखता हूं। बहुत बुरा मैं इसे हर बार नहीं बढ़ा सकता।
काइल

82

यह स्ट्रिंग में उपलब्ध है ::trim विधि के साथ उपयोग:

संपादक की टिप्पणी: String::Utilएक कोर मॉड्यूल नहीं है, लेकिन आप से स्थापित कर सकते हैं CPAN के साथ [sudo] cpan String::Util

use String::Util 'trim';
my $str = "  hello  ";
$str = trim($str);
print "string is now: '$str'\n";

प्रिंट:

स्ट्रिंग अब 'हैलो' है

हालांकि यह खुद करना काफी आसान है:

$str =~ s/^\s+//;
$str =~ s/\s+$//;

@ mklement0 और न ही यह कभी होगा। लेकिन यह प्रासंगिक नहीं है, क्योंकि सभी को CPAN से मॉड्यूल का उपयोग करना चाहिए।
ईथर

2
सभी को CPAN से मॉड्यूल का उपयोग क्यों करना चाहिए? मैन्युअल रूप से स्थापित CPAN मॉड्यूल के साथ संयुक्त अपने लिनक्स वितरण (debian, redhat, ubuntu) से पर्ल का उपयोग करते समय यह स्थिरता को मुश्किल बनाता है। यह बेहतर है अगर कुछ मॉड्यूल में पर्ल का उपयोग किया जा सकता है जो कि लिनक्स वितरण में पैकेज के रूप में उपलब्ध हैं
Marki555

@ Marki555 अपने linux distro में संकुल के रूप में उपलब्ध मॉड्यूल हैं CPAN से - वे बस repackaged किया गया है। आप आम तौर पर एक निश्चित मॉड्यूल को पैक करने का अनुरोध कर सकते हैं यदि यह पहले से ही ऐसा नहीं किया गया है (डेबियन लोग विशेष रूप से उत्तरदायी और सहायक हैं)।
ईथर

1
मुझे पता है कि वे सीपीएएन से भी हैं ... हां, आमतौर पर मैं डेबियन के लिए एक नए पीपीके का अनुरोध कर सकता हूं, लेकिन यह मेरे स्थापित डेबियन स्थिर रिलीज के लिए मेरी मदद नहीं करेगा ... इसलिए मैं पैकेज मॉड्यूल पसंद करता हूं, लेकिन सीधे सीपीएएन का उपयोग करें वास्तव में जरूरत है।
मार्किं ५५५ १३'१६ बजे i:

4
@ पूरे सम्मान के साथ, मैं वास्तव में यह जानते हुए भी सराहना करता हूं कि यह एक नॉन-कोर मॉड्यूल है। यह पोस्ट काफी सरल रीगेक्स वन-लाइनर के बदले एक मॉड्यूल का उपयोग करने के बारे में बात कर रहा है। यदि मॉड्यूल कोर है, तो मैं इसे बहुत अधिक खोलूंगा। यह इस मामले में प्रासंगिक है।
अंकलकर्ल

26

कोई अंतर्निहित trimफ़ंक्शन नहीं है, लेकिन आप एक सरल प्रतिस्थापन का उपयोग करके आसानी से अपना स्वयं का कार्यान्वयन कर सकते हैं:

sub trim {
    (my $s = $_[0]) =~ s/^\s+|\s+$//g;
    return $s;
}

या पर्ल 5.14 और बाद में गैर-विनाशकारी प्रतिस्थापन का उपयोग करना :

sub trim {
   return $_[0] =~ s/^\s+|\s+$//rg;
}



3

उन लोगों के लिए जो टेक्स्ट का उपयोग कर रहे हैं :: CSV मैंने यह धागा पाया और फिर CSV मॉड्यूल के भीतर देखा कि आप इसे स्विच के माध्यम से बाहर निकाल सकते हैं:

$csv = Text::CSV->new({allow_whitespace => 1});

तर्क इसमें पीछे है कि अगर आप स्ट्रिप करना चाहते हैं तो आप 1 पर जाएँ। आशा है कि यह किसी को भी मदद करता है।




2

मैं पाठ के अंदर दोहराए जाने वाले रिक्त स्थान को ट्रिम करने के लिए एक सकारात्मक रूप का उपयोग करता हूं:

s/^\s+|\s(?=\s)|\s+$//g

-4

नहीं, लेकिन आप एक ही परिणाम प्राप्त करने के लिए s///प्रतिस्थापन ऑपरेटर और \sव्हॉट्सएप के दावे का उपयोग कर सकते हैं ।


यह शब्दों के बीच रिक्त स्थान को हटा देगा, न कि केवल स्ट्रिंग के अंत में।
डेरेनडब्ल्यू

@ डारेनव: यह निर्भर करता है कि आप इसका उपयोग कैसे करते हैं।
फिलिप पॉटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.