regex 乌克兰字母的正则表达式,如何用大写字母分隔西里尔字母?

wsxa1bj1  于 2023-03-09  发布在  其他
关注(0)|答案(8)|浏览(194)

我有一个字符串,里面有一些西里尔字母,每个都以大写字母开头。

var str = 'ХєлпМіПліз';

我找到了这个解str.match(/[А-Я][а-я]+/g)
但是它返回的是["Пл"]而不是["Хєлп", "Мі", "Пліз"],看起来它不识别乌克兰字母(“","”),只识别俄语。
那么,我该如何修改正则表达式以包含乌克兰字母呢?

x4shl7ld

x4shl7ld1#

[А-Я]不是西里尔字母,它只是俄语!
西里尔文是一种书写系统。它用于许多语言的字母表中。(如拉丁文:西欧语言、东欧等的字符集)
如果同时有俄语和乌克兰语,你会得到[А-ЯҐЄІЇ]
添加白俄罗斯语:[А-ЯҐЄІЇЎ]
对于所有西里尔字符(包括巴尔干半岛语言和古西里尔),您可以通过Unicode子集类获取它,如:\p{IsCyrillic}
要单独处理乌克兰语:
[А-ЩЬЮЯҐЄІЇ][А-ЩЬЮЯҐЄІЇа-щьюяґєії]似乎是每种情况下33个字母的完整乌克兰字母表。
撇号不是字母,但偶尔会包含在字母表中,因为它对下一个元音有影响。撇号是单词的一部分,不是分隔符。它可能有几种显示方式:

27 "'" APOSTROPHE
60 "`" GRAVE ACCENT
2019 "’" RIGHT SINGLE QUOTATION MARK
2bc "ʼ" MODIFIER LETTER APOSTROPHE

也许还有更多。
是的,撇号有点复杂,没有统一的标准。

jbose2ul

jbose2ul2#

使用\p{Lu}匹配大写字母,使用\p{Ll}匹配小写字母,或使用\p{L}匹配任何字母

  • update:* 这只适用于Java,不适用于JavaScript。不要忘记在regexp中包含“apostrof”和“ji”
rm5edbpk

rm5edbpk3#

乌克兰字母表有四个不同于西里尔字母表的单词,如:[,,,],也可以包含单引号

"ґуля, з'їсти, істота, Європа".match(/[а-яієїґ\']+/ig)

i通过and将匹配大写字母,如“вропа”

uurv41yg

uurv41yg4#

解决这个问题的方法是查看unicode table来确定您需要的字符范围。例如,如果我使用以下模式:

str.match(/[А-Я][а-яєі]+/g)

它的作品与你的示例字符串.(对不起我不知道乌克兰字母)

7uzetpgm

7uzetpgm5#

[А-Я][а-я]确实不包含乌克兰字母。
而'я'是\u044f,''是\u0454,'i'是\u0456(是\u0404)。您应该手动将它们包含在正则表达式中:
/[А-ЯЄI][а-яєi]+/g

lawou6xi

lawou6xi6#

可以使用乌克兰字母“i”和其他字母

python
r's/[^а-яА-Я.!?]/./g+'
6fe3ivhb

6fe3ivhb7#

只有乌克兰语,没有俄语

[бвгґджзклмнпрстфхцчшщйаеєиіїоуюяь]/gi
eufgjt7s

eufgjt7s8#

试试下面的模式:

^[А-ЩЬЮЯҐЄІЇ][а-щьюяґєії']*$

相关问题