我需要拆分仅包含 lowerCase 和 UpperCase 字母的 camelCased 文字。如何使用正则表达式?
示例文字: ThisTextIsToBeSplitted
输出:此文本将被拆分
答案 0 :(得分:3)
我会提供以下解决方案,该解决方案保留首字母缩略词(例如ABC
),而其他答案则不会:
String input = "ThisTextWithInitialABCIsToBeSplitted";
String[] parts = input.split("((?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z]))");
for (String part : parts) {
System.out.println(part);
}
<强>输出:强>
This
Text
With
Initial
ABC
Is
To
Be
Splitted
拆分的逻辑是使用断言,断言但不消耗。在以下两个条件之一中发生拆分:
(?<=[a-z])(?=[A-Z])
(?<=[A-Z])(?=[A-Z][a-z])
第一个条件是当我们在前面前面的位置用小写字母,并立即以大写字母继续。但仅使用此规则,字符串InitialABCIs
将拆分为:
Intitial
ABCI
s
为了解决这个问题,我添加了第二个条件,当前一个字母为大写字母时,它会分开,然后是一个大写字母和一个小写字母。这允许我们将下一个camelcase单词的真正开始分开。
在这里演示:
答案 1 :(得分:2)
答案 2 :(得分:1)
String s = "ThisTextIsToBeSplitted";
System.out.println(Arrays.asList(s.split("(?=[A-Z])")));
工作正常。我的输出是:
[This, Text, Is, To, Be, Splitted]
对于Stephen的例子,输出为[This, T, E, X, T, Is, To, Be, Splitted]
,因为它会在每个大写字母上吐出
答案 3 :(得分:0)
我已完成表达式:(?=\\p{Upper})