我正在学习有关英文的正则表达式(正则表达式),虽然其中一些概念似乎适用于其他语言(如日语),但我觉得其他许多语言都不会。例如,常用的正则表达式是查找一个单词是否包含非字母数字字符。我不明白这种技术和其他技术如何为日本人工作,因为不仅有三种书写系统,而且日本汉字也非常复杂,并且比字母数字字符的范围要广泛得多。我会很感激关于这个话题的任何信息,以及更多的领域,因为我对这个主题知之甚少,尽管我已经参加了很多日语课程。如果可能的话,我希望你的答案能够使用python和Java,因为那些是我熟悉的语言。感谢您的帮助。日文中的正则表达式(正则表达式)
回答
Python正则表达式对Unicode功能提供有限的支持。 Java更好,尤其是Java 7.
Java支持Unicode类别。例如,\p{L}
(及其简写,\pL
)匹配任何语言的任何字母。这包括日本的表意文字。
Java 7支持Unicode脚本,包括平假名,片假名,汉字和拉丁脚本,日文文本通常由这些脚本组成。您可以使用\p{Han}
,\p{Hiragana}
,\p{Katakana}
和\p{Latin}
来匹配其中一个脚本中的任何字符。您可以将它们组合在一个字符类中,例如[\p{Han}\p{Hiragana}\p{Katakana}]
。您可以使用大写字母P
(如in,\P{Han}
)来匹配除汉字以外的任何字符。
Java 7支持Unicode块。除非在Android中运行代码(脚本不可用),否则通常应避免阻塞,因为它们比Unicode脚本的实用性和准确性要低。有各种相关的日文文本块,包括\p{InHiragana}
,\p{InKatakana}
,\p{InCJK_Unified_Ideographs}
,\p{InCJK_Symbols_and_Punctuation}
等
Java和Python可以参考使用\uFFFF
,其中FFFF
是任意四位数字headecimal个体代码点。 Java 7可以引用任何Unicode代码点,包括使用基本多语言平面之外的那些代码点。 \x{10FFFF}
。 Python正则表达式不支持21位Unicode,但Python字符串可以,因此您可以使用例如Python正则表达式将代码点嵌入到正则表达式中。 \U0010FFFF
(大写U
后跟八个十六进制数字)。
的Java 7的(?U)
或UNICODE_CHARACTER_CLASS
标志使得像\w
和\d
字符类速记支持Unicode,所以他们将匹配日本的表意字符等(但请注意,\d
仍然不匹配汉字像一二数字三四) 。默认情况下,Python 3使速记类可识别Unicode。在Python 2中,当您使用re.UNICODE
或re.U
标志时,速记类可以识别Unicode。
你说得对,并非所有的正则表达式思想都同样适用于所有的脚本。有些东西(如字母套)对日文文本没有意义。
根据Java 7文档,第二段很可能不正确。 **你有测试吗?**其余我现在不能测试。 – nhahtdh
Python版本3正则表达式支持Unicode与Java 7对Pattern类的方式大致相同:http://docs.python.org/py3k/library/re.html – nhahtdh
@nhahtdh,您的评论没有帮助。是的,Java支持Unicode脚本(在第二段中描述),并且不需要“Is”前缀来使用它们(我建议不要使用“Is”,因为这会使它不便于携带)。不,Python 3在其正则表达式语法中对Java功能(不包括Unicode脚本,类别,块等)的Unicode功能几乎没有支持。 – slevithan
对于Python
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
kanji = u'漢字'
hiragana = u'ひらがな'
katakana = u'カタカナ'
str = kanji + hiragana + katakana
#Match Kanji
regex = u'[\u4E00-\u9FFF]+' # == u'[一-龠々]+'
match = re.search(regex, str, re.U)
print match.group().encode('utf-8') #=> 漢字
#Match Hiragana
regex = u'[\u3040-\u309Fー]+' # == u'[ぁ-んー]+'
match = re.search(regex, str, re.U)
print match.group().encode('utf-8') #=> ひらがな
#Match Katakana
regex = u'[\u30A0-\u30FF]+' # == u'[ァ-ヾ]+'
match = re.search(regex, str, re.U)
print match.group().encode('utf-8') #=>カタカナ
- 1. 正则表达式(正则表达式)
- 2. 正则表达式(正则表达式)
- 3. 正则表达式(正则表达式)
- 4. 正则表达式正则表达式返回的值正则表达式
- 5. 正则表达式正则表达式正则表达式使用正则表达式,但不是与Python
- 6. 正则表达式正则表达式模仿正则表达式
- 7. PHP-MySQLi替换为正则表达式/正则表达式/正则表达式
- 8. 正则表达式日期
- 9. 正则表达式表达
- 10. 正则表达式表达
- 11. 正则表达式表达
- 12. 正则表达式中的正则表达式?
- 13. Java中的正则表达式(正则表达式和语法)
- 14. 正则表达式中的点(正则表达式)
- 15. 选择正则表达式的正则表达式中间值
- 16. 区分正则表达式中的多个正则表达式?
- 17. 正则表达式中的perl正则表达式
- 18. 正则表达式在javascript - 正则表达式中的变量
- 19. Firefox正则表达式中的Javascript正则表达式
- 20. 正则表达式中的正则表达式?
- 21. 正则表达式在c中的正则表达式#
- 22. Java UIMA:正则表达式中的正则表达式变量?
- 23. JavaScript中的正则表达式(正则表达式)
- 24. 正则表达式中的正则表达式帮助
- 25. 正则表达式中的正则表达式
- 26. Objective-C和正则表达式中的正则表达式
- 27. Python的正则表达式:“喜欢”正则表达式模式?
- 28. 形式的Java正则表达式PHP正则表达式
- 29. Java正则表达式组与。* vs正常正则表达式
- 30. .net System.Text.RegularExpressions在正则表达式中嵌套正则表达式
大多数正则表达式实现支持Unicode。什么样的正则表达式是一个单独的问题。 – SLaks
@Something Jones:您可以使用Unicode的十六进制值应用日文字符。即g:\ uXXXX其中XXXX是Unicode字符的值。 – jaselg
可能有所帮助:http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml。请注意,它不会将中文字形与相同字符的日文字形分开。 – nhahtdh