我正在尝试在有小写字母和大写字母的位置分割文本。

假设文字是:

"Įvairių rūšiųSkinti kardeliai"

我想将其拆分为“ųS”,但是以下正则表达式“ [±-ž] [Ą-Ž]”给了我:

"Įvairių r"

但是当我将母语字母和正则表达式更改为“ [a-z] [A-Z]”时

"Ivairiu rusiuSkinti kardeliai"

我得到了预期的结果:

"Ivairiu rusi"

最佳答案

[a-z]的意思是“将字符从a匹配到z”,对吗?作为人类,我们倾向于认为b显然在a之后,c则在b之后...等等。因此a-z将覆盖所有小写字母。

但是,实际上发生的是a-z匹配az之间的任何Unicode代码点,恰好所有的字母都是小写字母。

让我们看一下在±和ž之间的代码点。

ąĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽž


[ą-ž]将匹配以上任何字符!那不是你想要的,是吗?

为了解决这个问题,您可以


键入所有小写字母并将其放在[]中。对大写字母也要这样做,或者;
使用字符类,例如\p{Lu}表示大写,\p{Ll}表示小写。

10-08 09:07