स्ट्रिंग में एकाधिक शब्दों को खोजने के लिए मैं क्या उपयोग करूं? मैं तार्किक ऑपरेशन होना चाहता हूं और इसलिए कि सभी शब्द स्ट्रिंग में कहीं हैं। मेरे पास बकवास अनुच्छेदों का एक गुच्छा है और एक सादा अंग्रेजी अनुच्छेद है, और मैं इसे "सामान्य" जैसे शब्द और "और" निर्दिष्ट करके इसे कम करना चाहता हूं, लेकिन यह मेरे द्वारा निर्दिष्ट सभी शब्दों से मेल खाता है।रेगेक्स मल्टी शब्द खोज
उत्तर
हो सकता है कि एक language recognition chart का उपयोग कर अंग्रेज़ी काम करेगा पहचान करने के लिए। कुछ त्वरित परीक्षण काम करते प्रतीत होते हैं (यह केवल न्यूलाइन द्वारा अलग पैराग्राफ मानता है)।
regexp उन से कोई भी शर्त में से एक से मेल खाएगा ... \ bword \ b द्वारा सीमाओं शब्द \ b अलग शब्द है एक शब्द भी न खत्म होने वाली और सिर्फ शब्द पैरा के किसी भी स्थान में से मेल खाएगी मिलान किया जा रहा है।
my @paragraphs = split(/\n/,$text);
for my $p (@paragraphs) {
if ($p =~ m/\bthe\b|\band\b|\ban\b|\bin\b|\bon\b|\bthat\b|\bis\b|\bare\b|th|sh|ough|augh|ing\b|tion\b|ed\b|age\b|’s\b|’ve\b|n’t\b|’d\b/) {
print "Probable english\n$p\n";
}
}
पीसीआरई (पर्ल रेगेक्स) मानते हुए, मुझे यकीन नहीं है कि आप इसे आसानी से कर सकते हैं। और ऑपरेशन regexes का concatenation है, लेकिन आप उस आदेश को अनुमति देने में सक्षम होना चाहते हैं जिसमें शब्दों को औपचारिक रूप से क्रमपरिवर्तन उत्पन्न किए बिना दिखाई देता है। एन शब्दों के लिए, जब एन = 2, यह सहनशील है; एन = 3 के साथ, यह मुश्किल से ठीक है; एन> 3 के साथ, यह स्वीकार्य होने की संभावना नहीं है। तो, सरल पुनरावृत्त समाधान - एन regexes, प्रत्येक शब्द के लिए एक, और यह सुनिश्चित करने के लिए प्रत्येक संतुष्ट है - मुझे सबसे अच्छा विकल्प की तरह लग रहा है।
एन चीजों को फिर से क्यों किया जाना चाहिए? यहां "इंडेक्स" का उपयोग कर सकते हैं। –
\ b (foo | bar | baz) \ b। * \ B (?! \ 1) (foo | bar | baz) \ b। * \ B (?! \ 1) (?! \ 2) (foo | बार | बाज़) \ b को दो बार एक शब्द से मेल खाने से बचने के लिए पीछे संदर्भ और नकारात्मक लुकहेड का उपयोग करके क्रमपरिवर्तन को संभालना चाहिए। यह अभी भी ठीक से बुराई है, लेकिन कम से कम पैटर्न की लंबाई ओ (एन!) – stevemegson
@ बीकेबी: मुझे यकीन नहीं है कि एक इंडेक्स का उपयोग करके आपका क्या मतलब है। –
सबसे पहले मैं निश्चित नहीं हूं कि आप क्या लौटने की कोशिश कर रहे हैं ... पूरी सजा? आपके दो दिए गए शब्दों के बीच शब्द?
कुछ की तरह:
\b(word1|word2)\b(\w+\b)*(word1|word2)\b(\w+\b)*\.
एक पूरा वाक्य जो दो शब्दों से किसी एक या दोनों निहित मेल खाएगा ..
(जहां \b
अपनी भाषा में शब्द सीमा है) आप शायद था इसे केस असंवेदनशील बनाने की आवश्यकता है ताकि अगर यह वाक्य की शुरुआत में दिखाई दे तो यह अभी भी
क्या यह सिर्फ एक वाक्य से मेल नहीं खाता है जिसमें दो शब्द होते हैं, या तो शब्द 1 शब्द 2 के बाद, या शब्द 2 शब्द 1 (वांछित) के बाद, या शब्द 1 के बाद शब्द 1, या word2 के बाद word2 (वांछित नहीं) के बाद? उत्तर देने की कोशिश करते समय मैं उस तरह की समस्या का सामना कर रहा था। –
AND
को संगतता के रूप में
^(?=.*?\b(?:word1)\b)(?=.*?\b(?:word2)\b)(?=.*?\b(?:word3)\b)
प्रत्यावर्तन के रूप में OR
^(?=.*?\b(?:word1|word2|word3)\b
^(?=.*?\b(?:word1)\b)|^(?=.*?\b(?:word2)\b)|^(?=.*?\b(?:word3)\b)
नियमित अभिव्यक्तियां "लुकराउंड" स्थिति का समर्थन करती हैं जो आपको एक स्ट्रिंग के भीतर एक शब्द की खोज करने देती है और फिर परिणाम का स्थान भूल जाती है; अगले खोज शब्द के लिए स्ट्रिंग की शुरुआत से शुरू करना। यह किसी भी क्रम में शब्दों के समूह के लिए स्ट्रिंग को खोजने की अनुमति देगा।
इस के लिए नियमित रूप से अभिव्यक्ति है:
^(?=.*\bword1\b)(?=.*\bword2\b)(?=.*\bword3\b)
कहाँ \b
एक शब्द सीमा है और ?=
lookaround संशोधक है।
यदि आपके पास शब्दों की एक परिवर्तनीय संख्या है जिसे आप खोजना चाहते हैं, तो आपको लूप के साथ इस नियमित अभिव्यक्ति स्ट्रिंग को बनाने की आवश्यकता होगी - बस लुकराउंड सिंटैक्स में प्रत्येक शब्द को लपेटें और इसे अभिव्यक्ति में संलग्न करें।
बिल्कुल मुझे जो चाहिए था। ध्यान दें कि ऊपर लापता कुछ तारांकन हैं। प्रत्येक खंड '(? =। * \ Bword \ b) होना चाहिए' – Tamlyn
तारांकन वहां थे, लेकिन उन्हें मार्कअप के रूप में माना जा रहा था। मैंने कोड स्वरूपण लागू करके इसे ठीक किया है। –
- 1. पूरी फ़ाइल में मल्टी-लाइन रेगेक्स खोज
- 2. लुसीन: खोज शब्द के रूप में मल्टी-शब्द वाक्यांश
- 3. विम खोज शब्द
- 4. रेगेक्स शब्द सीमा वैकल्पिक
- 5. शब्द खोज एल्गोरिदम
- 6. सोलर सटीक शब्द खोज
- 7. मल्टी लाइन खोज और उपकरण
- 8. रेगेक्स स्ट्रिंग में शब्द ढूंढें
- 9. पायथन रेगेक्स खोज और विभाजित
- 10. नेटबीन्स मल्टी-लाइन नियमित अभिव्यक्ति खोज
- 11. रूबी रेगेक्स: पूरे शब्द को अस्वीकार करना
- 12. रूबी रेगेक्स "में एक शब्द है"
- 13. क्या Google खोज से खोज शब्द कैप्चर करना संभव है?
- 14. विम: मैं अपनी खोज से एक संपूर्ण शब्द कैसे निकालूं?
- 15. खोज/प्रतिस्थापन में नोटपैड ++ रेगेक्स बैकरेफर कॉन्फ़्रैक्स - \ 1 या $ 1
- 16. विजुअल स्टूडियो 2008 खोज और रेगेक्स
- 17. बहु-शब्द खोज के लिए एनएसपी्रेडिकेट
- 18. मिलान खोज शब्द सटीकता संभवतः लेवेनशेटिन दूरी
- 19. क्या के लिए वर्तमान आधुनिक शब्द "मल्टी-बाइट कैरेक्टर सेट"
- 20. सीए 1704 - माइक्रोसॉफ्ट 'मल्टी' शब्द को अवरुद्ध कर रहा है?
- 21. रेगेक्स शब्द स्टेमिंग के लिए सामान्य उपसर्ग कैसे बनाएं?
- 22. शब्द 1 या शब्द 2
- 23. शब्द
- 24. रेगेक्स
- 25. मल्टी-इंडेक्स में खोज रहे हैं ElasticSearch (टायर)
- 26. रेगेक्स: स्ट्रिंग से शब्द कैसे प्राप्त करें (सी #)
- 27. किसी भी भाषा में शब्द वर्णों के लिए रेगेक्स
- 28. स्ट्रिंग के लिए रेगेक्स में कई विशिष्ट शब्द नहीं हैं
- 29. आंशिक शब्द (जावास्क्रिप्ट) से मेल खाने के लिए रेगेक्स
- 30. पायथन रेगेक्स में यूनिकोड "शब्द वर्ण" को कैसे सत्यापित करें?
मैं अंग्रेजी का पता लगाने के लिए 'चालू' की सिफारिश नहीं करता। इसका अर्थ है 'वह' कई स्लाव भाषाओं में (जैसा कि मुझे यकीन है कि विंको जानता है;) –
यूआरएल स्थानांतरित हो गया है: http://en.wikipedia.org/wiki/Wikipedia:Language_recognition_chart#English –