我遇到一个正则表达式匹配大写字母可能后跟小写字母的问题。我想在任何此类比赛后中断,但我似乎无法让它发挥作用。
为了使其更通用 - 我想在正则表达式中的任何匹配之前和之后进行拆分。
示例 string "TeSTString"
想要的结果 -> [Te, S, T, St, ring]
我已经尝试了我能想到的一切,但我被前瞻或后瞻所欺骗。
首先我尝试了[A-Z][a-z]?
,并且匹配完美,但将其删除...
结果-> [ring]
在此之后我做了积极的前瞻(?=([A-Z][a-z]?))
给我一些接近的东西...
结果-> [Te, S, T, String]
和后视 (<=?([A-Z][a-z]?))
什么都不给...
结果-> [TeSTString]
甚至尝试逆转后视 (<=?([a-z]?[A-Z]))
,进行了绝望的尝试,但这相当不成功。
在我失去理智之前,有人可以给我指明正确的方向吗?
最佳答案
这是一种与预期结果相匹配的复杂模式。
String test = "TeSTStringOne";
System.out.println(
Arrays.toString(
// | preceded by lowercase
// | | followed by uppercase
// | | | or
// | | || preceded and followed by uppercase
// | | || | or
// | | || || preceded by uc
// | | || || AND lowercase
test.split("(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z])|(?<=[A-Z][a-z])")
)
);
输出
[Te, S, T, St, ring, On, e]
注意
将 [a-z]
替换为 \\p{Ll}
,将 [A-Z]
替换为 \\p{Lu}
与重音字母一起使用。
关于java - 正则表达式匹配Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35920731/