2012-12-11 14 views
6

में apostrophes नहीं, मैं जानना चाहता हूं कि सिंगल कोट्स को कैसे हटाया जाए लेकिन परल में apostrophes नहीं।सिंगल कोट्स को कैसे हटाएं, लेकिन perl

उदाहरण के लिए

: '! यह फिर से बारिश हो रही है'

प्रिंट

यह फिर से बारिश हो रही है!

धन्यवाद इतना

+1

आपका नमूने दोनों एकल उद्धरण और अक्षर लोप के लिए एक ही चरित्र, चरित्र के रूप में 'U + 0027 APOSTROPHE' यूनिकोड के द्वारा परिभाषित का उपयोग गैर जरूरत पर कब्जा रोकने के। मुझे लगता है कि आपका इरादा था, लेकिन यूनिकोड, 'यू + 2018 बाएं सिंगल कोटेशन मार्क' और 'यू + 201 9 राइट सिंगल कोटेशन मार्क' में अलग सिंगल-कोट वर्ण भी हैं।हो सकता है कि आप यह स्पष्ट करने के लिए अपने प्रश्न को अपडेट करना चाहें कि सभी पात्र एस्ट्रोफ़े चरित्र हैं (मान लीजिए कि आपका मतलब क्या है)। –

+1

मुझे नहीं लगता कि आप कुछ प्राकृतिक भाषा प्रसंस्करण के बिना ऐसा करने में सक्षम होंगे, यहां एक जटिल मामला है: 'यह बहुत निराशाजनक है' उसने कहा कि लड़कों के खिलौने हर जगह हैं। –

उत्तर

4

आप को लगता है कि एक एकल उद्धरण हमेशा पहले या खाली स्थान के द्वारा पीछा किया जाता है, तो नियमित अभिव्यक्ति के निम्नलिखित जोड़ी काम करना चाहिए:

$line =~ s/\s'/ /g; #preceded by whitespace 
$line =~ s/'\s/ /g; #followed by whitespace 

आप भी खाते की जरूरत है यदि स्ट्रिंग एक सिंगल कोट के साथ शुरू होती है या समाप्त होती है:

$str =~ s/^'//; #at the start of a string 
$str =~ s/'$//; #at the end of a string 
+1

+1 लेकिन \ n सफेद-स्पेस वर्ण न केवल स्थान (जो भी बेहतर है), आपको अभी भी बहुवचन अधिकारियों के साथ समस्या है: लड़कों के खिलौने। सुझाव/संपादन के लिए –

+0

धन्यवाद। –

1

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

s/(?<![\pL\s])'|'(?![\pL\s])//g; 

जिसके बाद या यह पहले अक्षर या खाली स्थान के बिना या तो एकल उद्धरण निकाल देंगे। वहां पर नजर रखने के लिए कई नकारात्मकियां। विस्तारित संस्करण:

s/ 
    (?<![\pL\s])' # no letters or whitespace before single quote 
    |    # or 
    '(?![\pL\s]) # no letters or whitespace after single quote 
//gx; 

यह जैसे शब्दों को कवर किया जाएगा - एली Algranti के रूप में एक टिप्पणी में कहा - boys' toys और that's, लेकिन भाषा हमेशा भविष्यवाणी करने के लिए मुश्किल है। उदाहरण के लिए, यह की तरह कुछ हल करने के लिए लगभग असंभव हो जाएगा:

'She looked at him and said, 'That's impossible!'' 

बेशक, अगर आप अपने एकल उद्धरण केवल अंत या स्ट्रिंग की शुरुआत में प्रकट करने के लिए उम्मीद, तो आप इस फैंसी होने की जरूरत नहीं है, आप किसी भी आवश्यक साधन के साथ, अंतिम और पहले चरित्र को हटा सकते हैं। इस तरह के रूप में, उदाहरण के लिए, स्पुतनिक के रूप में सिर्फ सुझाव:

s/^'|'$//g; 
1
foreach (<DATA>) { 
    s/(:?(^\s*'|'$))//g; 
    print; 
} 
__DATA__ 
'It's raining again!' 

आउटपुट

It's raining again! 

स्पष्टीकरण

  • वहाँ एक से अधिक एक ही रास्ता यह करने के लिए है
  • (:?)
संबंधित मुद्दे