ในกรณีที่คุณมีความกังวลมากเกี่ยวกับตัวละครแห่งชาติและการรักษาที่แม่นยำของ Unicode ชั้นเรียนตัวอักษรแล้วทางออกเดียวที่ฉันสามารถที่จะหาเพื่อให้ห่างไกลเป็นงูหลามห้องสมุดregex
ทั้งสองgrep
และPerl
(ฉันประหลาดใจที่สุด!) ทำงานไม่ถูกต้อง
\p{L}
ดังนั้นการแสดงออกปกติคุณหลังจากเป็นหนึ่งในนี้: นี้เป็นที่รู้จักในฐานะรุ่นคุณสมบัติ Unicode ชวเลขเวอร์ชันเต็มหรือแม้กระทั่ง \p{Letter}
ตัวเองเป็นชั้นคอมโพสิต แต่ฉันจะไม่ไปลงรายละเอียดอ้างอิงที่ดีที่สุดที่ฉันสามารถหาในเรื่องที่เป็นที่นี่p\{General_Category=Letter}
Letter
Python library ไม่ได้มีอยู่แล้วในภาษา (เป็นอีกทางเลือกหนึ่งของre
Library ในตัว) ดังนั้นคุณจะต้องติดตั้งตัวอย่างเช่น:
# 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)))
۱۲۳۴۵۶۷۸۹۰
แต่มีบาง-เชิงลบที่แท้จริงเช่นภาษาอาหรับหรือภาษาฮิบรู Alef: ,א
ا