Java 合并三个正则表达式组

Java 合并三个正则表达式组,java,regex,Java,Regex,我有三个不同的句子,其中包含重复的部分。 我想将三个不同的正则表达式组合并为一个,然后将所有的数学替换为空白。 我请求您的帮助,我应该如何管理这些小组 String locked = "LOCKED (center)"; //LOCKED() - always the same part String idle = "Idle (second)"; // Idle() - always the same part String OK = "example-OK"; // -OK - always

我有三个不同的句子,其中包含重复的部分。 我想将三个不同的正则表达式组合并为一个,然后将所有的数学替换为空白。 我请求您的帮助,我应该如何管理这些小组

String locked = "LOCKED (center)"; //LOCKED() - always the same part
String idle = "Idle (second)"; // Idle() - always the same part
String OK = "example-OK"; // -OK - always the same part
我已经构建了三个正则表达式,但它们是分开的。我该怎么做

String forLocked = locked.replaceAll("^LOCKED\\s\\((.*)\\)", "$1");
String forIdle = idle.replaceAll("^Idle\\s\\((.*)\\)", "$1");
String forOK = OK.replaceAll("(.*)\\-OK", "$1");

您可以将它们与
|
合并,如下所示:

String regex = "^LOCKED\\s\\((.*)\\)|^Idle\\s\\((.*)\\)|(.*)\\-OK$";

String forLocked = locked.replaceAll(regex, "$1");
String forIdle = idle.replaceAll(regex, "$2");
String forOK = OK.replaceAll(regex, "$3");

我认为这在技术上是可行的,但“感觉不太好”

输出为:

center
second
example
分解表达式:

  • ^((空闲|锁定)*)?
    -可能以空闲或锁定开头,后跟零个或多个空格
  • \\(?([a-z]+)\\)?
    -可选括号中可能嵌入了一系列小写字符(此外,我们希望匹配该序列)
  • (-OK)$
    -可能以文本
    -OK
    结尾
  • 但仍存在一些问题。例如,可选括号没有以任何方式绑定在一起。此外,这将为化合物提供误报,如
    Idle(second)-OK
    -->
    second


    起初,我有一个更严格的正则表达式,但另一个挑战是在你想要替换的组上保持一致的匹配索引(这里是,
    $3
    ),换句话说,有一整套正则表达式,如果你可以在不同的情况下使用,比如说
    $k
    $j
    ,这会更容易。但是,这与从一个正则表达式开始(如果您需要一些关于您将要匹配的输入的预先存在的知识)的目的背道而驰。最好假设我们对标识符
    锁定的
    空闲的
    中的内容一无所知,还有
    好的

    谢谢你这样饱和的回答我能再问你一个问题吗?当用户键入:-oK-oK-oK-oK时,如何处理case-sensetive。我怎么能忽略这个案例呢?为什么我这样做会出错:(?i)([A-Za-z0-9ÆæåØø&\s]+)(-好的)$用于测试的网页:嗯,我在java IDE中尝试过这个方法,看起来很有效。可能是网页语法问题。嘿,安德鲁,你可能想调整
    [a-z]
    来处理更广泛的字符范围<代码>[a-zA-Z]
    例如。只是不要包含
    \\(
    \-
    \\)
    ,因为它可能会打破整个正则表达式中的其他假设。还要记住,Java正则表达式在其他语言中不起作用,因为它使用双反斜杠,这是“不寻常的”
    center
    second
    example