试图在Java正则表达式中为4个简单条件制作正则表达式

问题描述 投票:0回答:3

我正在尝试使regex用于4个简单条件:

  1. [AdobeSoftware应该是“ Adob​​e”和“软件”->获取2个字符串“ Adob​​e”和“软件”]
  2. adobeSoftware应该是“ adobe”和“ Software”,获得2个字符串“ adobe”和“ Software”
  3. ADobeSoftware应该是“ ADobe”和“软件”,获得2个字符串“ ADobe”和“ Software”
  4. adobe1软件应为“ adobe”以及“ 1”和“ Software”获得3个字符串“ adobe”以及“ 1”和“ Software”我无法达到最后一个。

我从我这边做的事情如下:

("
 + "?<=[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])"))

我无法通过上述正则表达式来实现以上目标,可以有人指导我如何根据上述条件来实现。

提前感谢

java regex string server-side qregularexpression
3个回答
0
投票

正则表达式([aA][dD][oO][bB][eE])([0-9]?)([a-zA-Z]+)满足您描述的所有4个条件。

([aA][dD][oO][bB][eE])将使单词“ Adob​​e”与大小写字母的任意组合匹配。 ([0-9]?)将匹配两个单词之间的选项数字。 ([a-zA-Z]+)将匹配任何字母序列。


0
投票

您可以使用捕获组而不是环顾四周来获得这些匹配项,并使数字组为可选:

\b([A-Z]*[a-z]+)(\d+)?([A-Z][a-z]+)\b

Regex demo | Java demo

或匹配第二组(\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

0
投票

您可以使用表达式:

© www.soinside.com 2019 - 2024. All rights reserved.