सबसे पहले कुछ प्रतिक्रिया, और दस मिनट में इसे लिखने के लिए प्रशंसा:
-
(?<=\p{L}) => यह अच्छा है, लेकिन मैं सुझाव देता हूँ कि "अक्षर" को वास्तविक कैच (catch) में शामिल करें, ताकि उपयोगकर्ता यह देख सके कि REGEX ने संभावित "वाक्य अंत" कहाँ देखा। बड़े और छोटे अक्षरों को पकड़ने के लिए प्रशंसा। इसलिए मेरे प्रस्ताव में मैं ?<= को ?: से बदल देता हूँ।
-
(?<!\\[\w+]) => मेरा मानना है कि कुछ मार्कर के साथ गलत परिणामों (false positives) से बचने के लिए, यह भाग आपके "अक्षर" के बाईं ओर होना चाहिए। साथ ही, + को वर्ग कोष्ठकों के बाहर होना चाहिए क्योंकि कई मार्कर में कई अक्षर होते हैं, जैसे \s1।
-
और कुछ मार्कर में * शामिल होता है, उदाहरण के लिए किसी चीज़ के अंत के लिए जैसे \em*। मुझे धुंधली याद है कि कुछ मार्कर में + भी शामिल हो सकता है या होना चाहिए। यदि ऐसा है, तो आप आसानी से अक्षरों की सूची में [\w*+] जैसे कुछ जोड़ सकते हैं।
-
\s*(?:\\\w+)?\s* => मैं इसे इससे बदल देता हूँ: "श्लोक के अंत और अगले श्लोक की शुरुआत के बीच किसी भी संख्या के संभावित मार्कर और किसी भी रिक्त स्थान को छोड़ दें।
-
\\v [\d\w]+ \p{Lu} => एक श्लोक खोजें जिसके बाद एक बड़ा अक्षर हो। लगता है कि आप \v और श्लोक संख्या के बीच और श्लोक संख्या के बाद "क्लासिक स्पेस" के बारे में यकीन रखते हैं, इसलिए मैं उस संतर्क (syntax) को बनाए रखा है।
मैं एक संशोधित REGEX प्रस्तुत करना चाहूँगा, यह दावा किए बिना कि यह अंतिम समाधान है, बस उम्मीद है कि यह अधिक मामलों को कवर करेगा:
(?<!\\[\w\*]*)(?:\p{L})\s*(?:\\[\w\*]+\s+)*\\v [\d\w]+ \p{Lu}
यहाँ मेरे REGEX का विवरण है, मेरे टूल के अनुसार:
(?<!\\[\w\*]*)(?:\p{L})\s*(?:\\[\w\*]+\s+)*\\v [\d\w]+ \p{Lu}
(?<!\\[\w\*]*)(?:\p{L})\s*(?:\\[\w\*]+\s+)*\\v [\d\w]+ \p{Lu}
(?<!\\[\w\*]*)(?:\p{L})\s*(?:\\[\w\*]+\s+)*\\v [\d\w]+ \p{Lu}विकल्प: केस संवेदनशील नहीं; सटीक स्पेसिंग; डॉट लाइन ब्रेक्स से मेल खाता है
-
यह सत्यापित करें कि इस स्थिति पर नीचे दिए गए REGEX से पीछे की ओर मेल खाना असंभव है (नेगेटिव लुकबेहाइंड)
- बैकस्लैश चरण से मेल खाएं
-
नीचे दी गई सूची में मौजूद एकल चरण से मेल खाएं
- शून्य से असीमित बार तक, जितना संभव हो उतना बार, जितना आवश्यक हो उतना वापस (ग्रीडी)
- एक "वर्ड चरण" (यूनिकोड; किसी भी भाषा का कोई भी अक्षर या आइडियोग्राम, अंक, अक्षर संख्या, कनेक्टर विराम चिह्न)
- वैकल्पिक चरण "*"
-
नीचे दिए गए नियमित व्यंजक से मेल खाएं
- यूनिकोड श्रेणी "अक्षर" से एक चरण से मेल खाएं (किसी भी भाषा का किसी भी प्रकार का अक्षर)
-
एकल चरण से मेल खाएं जो "व्हाइटस्पेस चरण" है (किसी भी यूनिकोड विभाजक, टैब, लाइन फीड, कैरियज रिटर्न, वर्टिकल टैब, फॉर्म फीड, अगली लाइन, शून्य-चौड़ाई स्पेस)
- शून्य से असीमित बार तक, जितना संभव हो उतना बार, जितना आवश्यक हो उतना वापस (ग्रीडी)
-
नीचे दिए गए नियमित व्यंजक से मेल खाएं
- शून्य से असीमित बार तक, जितना संभव हो उतना बार, जितना आवश्यक हो उतना वापस (ग्रीडी)
- बैकस्लैश चरण से मेल खाएं
-
नीचे दी गई सूची में मौजूद एकल चरण से मेल खाएं
- एक से असीमित बार तक, जितना संभव हो उतना बार, जितना आवश्यक हो उतना वापस (ग्रीडी)
- एक "वर्ड चरण" (यूनिकोड; किसी भी भाषा का कोई भी अक्षर या आइडियोग्राम, अंक, अक्षर संख्या, कनेक्टर विराम चिह्न)
- वैकल्पिक चरण "*"
-
एकल चरण से मेल खाएं जो "व्हाइटस्पेस चरण" है (किसी भी यूनिकोड विभाजक, टैब, लाइन फीड, कैरियज रिटर्न, वर्टिकल टैब, फॉर्म फीड, अगली लाइन, शून्य-चौड़ाई स्पेस)
- एक से असीमित बार तक, जितना संभव हो उतना बार, जितना आवश्यक हो उतना वापस (ग्रीडी)
- बैकस्लैश चरण से मेल खाएं
- चरण स्ट्रिंग "v " से वैकल्पिक रूप से मेल खाएं (केस संवेदनशील नहीं)
-
नीचे दी गई सूची में मौजूद एकल चरण से मेल खाएं
- एक से असीमित बार तक, जितना संभव हो उतना बार, जितना आवश्यक हो उतना वापस (ग्रीडी)
- एक "अंक" (किसी भी यूनिकोड लिपि में कोई भी दशमलव संख्या)
- एक "वर्ड चरण" (यूनिकोड; किसी भी भाषा का कोई भी अक्षर या आइडियोग्राम, अंक, अक्षर संख्या, कनेक्टर विराम चिह्न)
- चरण " " से वैकल्पिक रूप से मेल खाएं
- यूनिकोड श्रेणी "अपपरकेस अक्षर" से एक चरण से मेल खाएं (एक अपपरकेस अक्षर जिसका लोअरकेस संस्करण है)
और यहाँ कुछ नमूना पाठ है, जिसका मैंने परीक्षण के लिए उपयोग किया। संभवतः यह अधूरा है (हर उदाहरण के अंत में, मैं चिह्नित करता हूँ कि क्या यह कैच है या नहीं):
\v 8 Some text without \em punctuation\em* \rem \any \v 9 A new verse which is a new sentence, starting with a capital. [catch]
\v 8 Some text without \em punctuation\em* \v 9 A new verse which is a new sentence, starting with a capital. [catch]
\v 8 Some text without punctuation \v 9a A new verse which is a new sentence, starting with a capital. [catch]
\v 8 Some text with proper \em punctuation.\em* \just \one \more \v 9 A new verse which is a new sentence, starting with a capital. [punctuation present, so no catch]
\v 8 Some text ending an an all-cap word like \em LORD\em* \v 9 A new verse which is a new sentence, starting with a capital. [catch]
\v 10 A long sentence \whatever \v 11a over two verses or more. [No punctuation needed, so no catch]
तो, यह मज़ेदार था। उम्मीद है कि मैं बहुत दूर नहीं हूँ। दुर्भाग्य से, मैं कभी याद नहीं रख पाता कि PT किस REGEX फ्लेवर का उपयोग करता है। यदि फ्लेवर के कारण संतर्क (syntax) के साथ कोई समस्या है, तो मैं आसानी से .NET या Java जैसे कोई अन्य फ्लेवर लागू कर सकता हूँ और अपना टूल फिर से चला सकता हूँ।
फिर से: यह समाधान नहीं है, लेकिन शायद एक संवाद शुरू करने के लिए उपयोगी हो सकता है।
hth