希伯来语将元音打印为字母周围的 nekudot/点。
带元音:“???????????????????????????????????????????????????? ????????????????????????????????????????????????”
没有元音:“????????????????????????????????????????????????????
我需要一种方法来从字符串中去除这些元音。如将带元音的字符串转换为不带元音的字符串。有什么建议?
-ps
我试过 "hebrew.gsub(/[^?-?]/, '')" 但这有两个问题: a:这将删除所有标点符号、英语等。我只想删除元音。b:一些字母也被删除了。(我的理解是有限的,但似乎有些字母/元音组合在 utf-8 中变成了“多字节”并且不会匹配“?-?”。
我在网上找到了这个:https : //gist.github.com/yakovsh/345a71d841871cc3d375,但 ruby 建议仅适用于 rails,(假设它完全有效)。但是,该页面可能有助于找到解决方案。
请帮忙,提前致谢。
元音都在 U+0591 和 U+05C7 之间,所以你可以这样做
hebrew.gsub(/[\u0591-\u05c7]/,"")
Run Code Online (Sandbox Code Playgroud)
例如
" ??????????? ???????? ??????? ????????? ?????????? ????????? ????????? ???? ???????? ?????????".gsub(/[\u0591-\u05c7]/,"")
# => " ????? ???? ???? ???? ?????? ????? ???? ??? ????? ????"
Run Code Online (Sandbox Code Playgroud)
但是,只有当元音在字符串中都是单独的字符时才有效 - 或者在 Unicode 中说同样的话,如果文本是规范化形式 D。您可以通过调用来确保是这种情况 String#unicode_normalize首先它:
hebrew.unicode_normalize(:nfd).gsub(/[\u0591-\u05c7]/,"")
Run Code Online (Sandbox Code Playgroud)
这一步是必要的,因为 Unicode 包含几个单独的字符,这些字符将字母与nekuddot 组合在一个代码点中,以实现与不支持组合变音符号的旧字符集的往返兼容性。这些字符意味着您无法仅通过查看字符串“??”来判断 由两个代码点序列组成,U+05D1 HEBREW LETTER BET后跟U+05BC HEBREW POINT DAGESH OR MAPIQ,或者只是单个字符U+FB31 HEBREW LETTER BET WITH DAGESH。将字符串放入规范化形式 D 将后者替换为前者,并且还将任何其他“预组合”字符拆分为它们的组成部分。
| 归档时间: |
|
| 查看次数: |
727 次 |
| 最近记录: |