Ich lerne über Reguläre Ausdrücke (Regex) für Englisch und obwohl einige der Konzepte scheinen, als ob sie auf andere Sprachen wie Japanisch anwenden würden, habe ich das Gefühl, als ob viele andere nicht. Zum Beispiel wird regex häufig verwendet, um herauszufinden, ob ein Wort nicht alphanumerische Zeichen enthält. Ich sehe nicht, wie diese Technik und andere für Japanisch funktionieren würden, da es nicht nur drei Schriftsysteme gibt, sondern Kanji auch sehr komplex sind und eine viel größere Reichweite haben als alphanumerische Zeichen. Ich würde mich über Informationen zu diesem Thema freuen und auch über Bereiche, in denen ich mehr darüber in Betracht ziehen kann, da ich sehr wenig über das Thema weiß, obwohl ich viele Japanischkurse belegt habe. Wenn es möglich wäre, würde ich gerne Ihre Antworten Python und Java verwenden, da dies die Sprachen sind, mit denen ich mich auskenne. Danke für Ihre Hilfe.Reguläre Ausdrücke (Regex) in Japanisch
Antwort
Python Regexes bieten eingeschränkte Unterstützung für Unicode-Funktionen. Java ist besser, insbesondere Java 7.
Java unterstützt Unicode-Kategorien. Beispielsweise kann \p{L}
(und seine Kurzschrift \pL
) mit jedem Buchstaben in jeder Sprache übereinstimmen. Dies schließt japanische ideographische Zeichen ein.
Java 7 unterstützt Unicode-Skripts, einschließlich der Hiragana-, Katakana-, Han- und Latein-Skripts, aus denen japanischer Text normalerweise besteht. Sie können jedes Zeichen in einem dieser Skripts mit \p{Han}
, \p{Hiragana}
, \p{Katakana}
und \p{Latin}
abgleichen. Sie können sie in einer Zeichenklasse wie [\p{Han}\p{Hiragana}\p{Katakana}]
kombinieren. Sie können einen Großbuchstaben P
(wie in, \P{Han}
) verwenden, um ein beliebiges Zeichen außer denen im Han-Skript zu finden.
Java 7 unterstützt Unicode-Blöcke. Sofern Sie Ihren Code nicht in Android ausführen (wo keine Skripts verfügbar sind), sollten Sie Blöcke generell vermeiden, da sie weniger nützlich und genauer als Unicode-Skripte sind. Es gibt eine Vielzahl von Blöcken von japanischen Text bezogen, einschließlich \p{InHiragana}
, \p{InKatakana}
, \p{InCJK_Unified_Ideographs}
, \p{InCJK_Symbols_and_Punctuation}
usw.
Sowohl Java und Python auf einzelne Codepunkte beziehen können mit \uFFFF
, wo FFFF
ist jede vierstellige Zahl headecimal. Java 7 kann sich auf einen beliebigen Unicode-Codepunkt beziehen, einschließlich derjenigen, die jenseits der Basic Multilingual Plane liegen, unter Verwendung von z. \x{10FFFF}
. Python-Regexes unterstützen keinen 21-Bit-Unicode, aber Python-Strings tun dies, sodass Sie einen Code-Punkt in eine Regex einbetten können, indem Sie z. \U0010FFFF
(Großbuchstaben U
gefolgt von acht Hex-Ziffern).
Die Java 7 (?U)
oder UNICODE_CHARACTER_CLASS
Flagge macht Zeichenklasse Kürzel wie \w
und \d
Unicode bewusst, so dass sie japanische ideographic Zeichen übereinstimmen, usw. (aber beachten Sie, dass \d
noch nicht Kanji Match für Zahlen wie 一二 三四) . In Python 3 werden Stenoklassen standardmäßig als Unicode erkannt. In Python 2 sind Kurzschreibungsklassen Unicode-fähig, wenn Sie das Flag re.UNICODE
oder re.U
verwenden.
Sie haben Recht, dass nicht alle Regex-Ideen für alle Skripte gleichermaßen geeignet sind. Einige Dinge (wie Briefumschläge) sind mit japanischem Text einfach nicht sinnvoll.
Der zweite Absatz ist sehr wahrscheinlich in der Java 7 Dokumentation falsch. ** Hast du getestet? ** Den Rest kann ich jetzt nicht testen. – nhahtdh
Python Version 3 Regex unterstützt Unicode mehr oder weniger auf die gleiche Art und Weise wie Java 7 für die Musterklasse: http://docs.python.org/py3k/library/re.html – nhahtdh
@nhahtdh, Ihre Kommentare sind nicht hilfreich. Ja, Java unterstützt Unicode-Skripte (wie in meinem zweiten Absatz beschrieben) und erfordert nicht das Präfix "Is", um sie zu verwenden (ich empfehle, "Is" nicht zu verwenden, da es dadurch weniger portabel ist). Und nein, Python 3 hat in seiner Regex-Syntax nicht annähernd die gleiche Unterstützung für Unicode-Funktionen wie Java (keine Unicode-Skripte, Kategorien, Blöcke usw.). – slevithan
Die Java-Zeichenklassen tun so etwas wie das, wonach Sie suchen. Sie sind diejenigen, die mit \ p here beginnen.
@nhahtdh: Bitte stellen Sie eine Frage zu etwas speziell zu versuchen. – Ashe
Ich habe gerade herausgefunden, warum ich falsch, wenn ich diesen Code ausführen: http://ideone.com/p3P9b auf meinem Computer. Der Kompilierungsbefehl sollte 'javac -encoding utf8
Für 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. regex: Kombiniere 3 reguläre Ausdrücke
- 2. Reguläre Ausdrücke in J2ME
- 3. reguläre Ausdrücke in julia
- 4. Reguläre Ausdrücke in MarkLogic xQuery
- 5. Backtracking Reguläre Ausdrücke in .Net
- 6. Reguläre Ausdrücke passend
- 7. .CSV-Datei reguläre Ausdrücke
- 8. Warum werden reguläre Ausdrücke "reguläre" Ausdrücke genannt?
- 9. Reguläre Ausdrücke fixed prefix
- 10. Reguläre Ausdrücke und GWT
- 11. Reguläre Ausdrücke in C++ STL
- 12. Reguläre Ausdrücke und „Gruppen“
- 13. php reguläre Ausdrücke Gruppen
- 14. Reguläre Ausdrücke
- 15. SQLite und reguläre Ausdrücke
- 16. SQL: Reguläre Ausdrücke `
- 17. Fuzzy Reguläre Ausdrücke
- 18. Reguläre Ausdrücke in Fitnesse Tabellen
- 19. Reguläre Ausdrücke Zweifel
- 20. Gegenseitig exklusive reguläre Ausdrücke
- 21. Reguläre Ausdrücke in erwarten
- 22. Reguläre Ausdrücke in C#
- 23. Reguläre Ausdrücke in OCaml
- 24. Reguläre Ausdrücke in JDBC
- 25. ändern RegEx zu ermöglichen, sowohl für Englisch und Japanisch Zeichen
- 26. Sanitization von benutzerdefinierten reguläre Ausdrücke in PHP
- 27. Kombinieren Sie einige reguläre Ausdrücke
- 28. Komponiert Reguläre Ausdrücke - brechen eine Regex in eine lesbare Form
- 29. Konvertieren von Benutzereingabezeichenfolgen in reguläre Ausdrücke
- 30. Haskell: Reguläre Ausdrücke und Data.Text
meisten Regex-Implementierungen unterstützen Unicode. Welche Art von Regexes zu schreiben ist eine separate Frage. – SLaks
@Something Jones: Sie können japanische Zeichen mit dem Hexadezimalwert von Unicode anwenden. e.g: \ uXXXX wobei XXXX der Wert des Unicode-Zeichens ist. – jaselg
Etwas, das helfen kann: http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml. Beachten Sie, dass chinesische Schriftzeichen nicht von japanischen Schriftzeichen desselben Schriftzeichens getrennt werden. – nhahtdh