我正在尝试使regex用于4个简单条件:
我从我这边做的事情如下:
("
+ "?<=[a-z])(?=[A-Z])|("
+ "?<=[A-Z])(?=[A-Z][a-z])|("
+ "?<=[0-9])(?=[A-Z][a-z])|("
+ "?<=[a-zA-Z])(?=[0-9])|(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])"))
我无法通过上述正则表达式来实现以上目标,可以有人指导我如何根据上述条件来实现。
提前感谢
正则表达式([aA][dD][oO][bB][eE])([0-9]?)([a-zA-Z]+)
满足您描述的所有4个条件。
([aA][dD][oO][bB][eE])
将使单词“ Adobe”与大小写字母的任意组合匹配。 ([0-9]?)
将匹配两个单词之间的选项数字。 ([a-zA-Z]+)
将匹配任何字母序列。
您可以使用捕获组而不是环顾四周来获得这些匹配项,并使数字组为可选:
\b([A-Z]*[a-z]+)(\d+)?([A-Z][a-z]+)\b
或匹配第二组(\d*)
中的0+位数字>
然后您可以检查是否存在第2组,或者在后一种情况下检查第2组的值。
示例代码
String regex = "\\b([A-Z]*[a-z]+)(\\d+)?([A-Z][a-z]+)\\b";
String string = "AdobeSoftware\n"
+ "adobeSoftware\n"
+ "ADobeSoftware\n"
+ "adobe1Software";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
for (int i = 1; i <= matcher.groupCount(); i++) {
if (matcher.group(i) != null) {
System.out.println(matcher.group(i));
}
}
System.out.println("\n");
}
输出
Adobe
Software
adobe
Software
ADobe
Software
adobe
1
Software
您可以使用表达式: