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