我正在尝试将文本拆分为小写字母后跟大写字母。
让我们说文字是:
"Įvairių rūšiųSkinti kardeliai"
我想把它拆分为“ųS”,但是下面的正则表达式“[ą-ž] [Ą-Ž]”给了我:
"Įvairių r"
但是当我将我的母语字母和正则表达式更改为“[a-z] [A-Z]”时
"Ivairiu rusiuSkinti kardeliai"
我得到了预期的结果:
"Ivairiu rusi"
答案 0 :(得分:4)
[a-z]
表示“匹配a到z的字符”,对吧?我们作为人类倾向于认为显然b在a之后,c在b之后...等等所以a-z将覆盖所有小写字母。
然而,实际发生的是a-z
匹配a
和z
之间的任何Unicode代码点,其中碰巧是所有小写字母
让我们看看±和ž之间的代码点。
ąĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽž
[ą-ž]
将匹配以上任何字符!这不是你想要的,是吗?
要解决此问题,您可以
[]
。对大写的一样做,或者; \p{Lu}
表示大写,\p{Ll}
表示小写。答案 1 :(得分:2)
[Ą-Ž]
包括š
。
for (char c = 'Ą'; c <= 'Ž'; ++c)
System.out.print(c);
结果:
ĄąĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽ
但[A-Z]
不包含s
。
for (char c = 'A'; c <= 'Z'; ++c)
System.out.print(c);
结果:
ABCDEFGHIJKLMNOPQRSTUVWXYZ