我有一个字符串里面有一些西里尔字。每个都以大写字母开头。
var str = 'ХєлпМіПліз';
我找到了这个解决方案str.match(/[А-Я][а-я]+/g)
。
但它返回["Пл"]
["Хєлп", "Мі", "Пліз"]
{{1}}。似乎它不承认乌克兰字母('і','є'),只有俄语。
那么,我如何更改该正则表达式以包含乌克兰字母?
答案 0 :(得分:8)
使用\p{Lu}
表示大写字母,\p{Ll}
表示小写,或\p{L}
表示匹配任何字母
更新的 这仅适用于Java,不适用于JavaScript。 不要忘记在你的正则表达式中包含“apostrof”,“ji”
答案 1 :(得分:4)
[А-Я]
不是西里尔字母,只是俄语!
西里尔文是一种写作系统。它在多种语言的字母中使用。 (例如拉丁语:西欧语言的字符集,东欧等)
同时拥有俄语和乌克兰语,您会得到[А-ЯҐЄІЇ]
。
要添加白俄罗斯语:[А-ЯҐЄІЇЎ]
对于所有西里尔字符(包括巴尔干语和旧西里尔字母),您可以通过Unicode子集类来获取它,例如:\p{IsCyrillic}
[А-ЩЬЮЯҐЄІЇ]
或[А-ЩЬЮЯҐЄІЇа-щьюяґєії]
在每种情况下似乎都是由33个字母组成的完整乌克兰字母。
撇号不是字母,而是偶尔包含在字母表中,因为它会影响下一个元音。 撇号是单词的一部分,而不是分隔符。它可能以几种方式显示:
27 "'" APOSTROPHE 60 "`" GRAVE ACCENT 2019 "’" RIGHT SINGLE QUOTATION MARK 2bc "ʼ" MODIFIER LETTER APOSTROPHE
也许还有更多
是的,单引号有点复杂。没有通用的标准。
答案 2 :(得分:3)
解决此问题的方法是查看unicode table以确定所需的字符范围。例如,如果我使用模式:
str.match(/[А-Я][а-яєі]+/g)
它适用于您的示例字符串。 (对不起,我不知道乌克兰的信件)
答案 3 :(得分:3)
[А-Я][а-я]
确实不包括乌克兰字母。
“я”为\u044f
,“є”为\u0454
,“i”为\u0456
(\u0404
为Є)。你应该手工将它们包含在正则表达式中:
/[А-ЯЄI][а-яєi]+/g
答案 4 :(得分:1)
乌克兰字母表中有四个不同于西里尔字母的单词,例如:[і,є,ї,ґ],也可以包含单个引号
"ґуля, з'їсти, істота, Європа".match(/[а-яієїґ\']+/ig)
i
由the和大写字母匹配,就像“Європа”
答案 5 :(得分:0)
使用乌克兰字母“ i”和其他字母
python
r's/[^а-яА-Я.!?]/./g+'
答案 6 :(得分:0)
只有乌克兰语,没有俄语
[бвгґджзклмнпрстфхцчшщйаеєиіїоуюяь]/gi