यदि आप राष्ट्रीय पात्रों और यूनिकोड चरित्र वर्गों के सटीक उपचार के बारे में बहुत चिंतित थे, तो एकमात्र उपाय जो मैं अब तक पा रहा था वह पायथन regex
पुस्तकालय है । दोनों grep
और Perl
(मेरे बोलना आश्चर्य करने के लिए!) काम ठीक से नहीं किया।
तो, आप इसके बाद की नियमित अभिव्यक्ति हैं \p{L}
। इसे यूनिकोड प्रॉपर्टी शॉर्टहैंड संस्करण के रूप में जाना जाता है, पूर्ण संस्करण \p{Letter}
या भी है p\{General_Category=Letter}
। Letter
अपने आप में एक समग्र वर्ग है, लेकिन मैं विवरण में नहीं जाऊंगा, सबसे अच्छा संदर्भ जो मुझे इस विषय पर मिल सकता है ।
पायथन लाइब्रेरी भाषा में बिल्ट-इन नहीं है (यह बिल्ट-इन re
लाइब्रेरी का एक विकल्प है )। इसलिए, आपको इसे स्थापित करने की आवश्यकता होगी, उदाहरण के लिए:
# pip install regex
फिर, आप इसे इस तरह इस्तेमाल कर सकते हैं:
import regex
>>> regex.match(ur'\p{L}+', u'۱۲۳۴۵۶۷۸۹۰')
>>> regex.match(ur'\p{L}+', u'абвгд')
<regex.Match object; span=(0, 5), match=u'\u0430\u0431\u0432\u0433\u0434'>
>>> regex.match(ur'\p{L}+', u'123')
>>> regex.match(ur'\p{L}+', u'abcd')
<regex.Match object; span=(0, 4), match=u'abcd'>
>>>
आप इस स्क्रिप्ट को कहीं भी रख सकते हैं जहाँ आप इसे एक्सेस कर सकते हैं:
#!/usr/bin/env python
import regex
import sys
if __name__ == "__main__":
for match in regex.finditer(ur'\p{L}+', sys.argv[1].decode('utf-8')):
print match.string
और इसे Emacs से इस तरह से कॉल करें (मान लीजिए कि आपने इस स्क्रिप्ट को सहेज लिया है ~/bin
):
(defun unicode-character-p ()
(interactive)
(let* ((current (char-after (point)))
(result (shell-command-to-string
(format "~/bin/is-character.py '%c'" current))))
(message
(if (string= result "") "Character %c isn't a letter"
"Character %c is a letter")
current)))
۱۲۳۴۵۶۷۸۹۰
लेकिन कुछ सच्चे-नकारात्मक हैं, जैसे अरबी या हिब्रू एलेफ:א
,ا
।