regex 正则表达式检查字符串中出现的奇数

tvz2xvvm  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(113)

我想让java正则表达式删除字符串之前和之后的字符串“4040”,考虑以下情况。

场景:1

如果整个字符串有偶数对4040,则它将删除每个对,输出将是空字符串。
示例:

  • 40404040404040-->“”
  • 40404040 -->“”
    场景:***

在其他情况下,在4040对之间可能有一些数据,那么它应该在从两个大小中删除4040之后返回该字符串。对两边的否可以是任意的(也可以是0)。
例如:-

  • 4040StackOverFlow4040 --> StackOverFlow
  • 4040StackOverFlow40404040 --> StackOverFlow
  • StackOverFlow4040 --> StackOverFlow
  • 40404040堆栈溢出-->堆栈溢出
    场景:****

如果我有奇数对4040,它应该返回“4040”。因为中间一个是实际数据。
例如:-

  • 404040404040 --> 4040
  • 404040404040404040--> 4040

需要一个可以包含所有场景的正则表达式。
我尝试使用^(4040)*|(4040)*$匹配字符串并将其替换为空字符串。但它不适用于第三种情况。任何方法来检测奇数对4040。

jslywgbw

jslywgbw1#

为什么要使用正则表达式?让自己的生活更轻松:
(伪代码)

var string = ...
while (string.startsWith("4040") && string.endsWith("4040")) {
  string = string.substring(4, string.length - 4)
}
return string
apeeds0o

apeeds0o2#

试试这个:

str = str.replaceAll("^((?:4040)+)(.*?)\\1$", "$2");

这通过要求相同的输入前后通过向后参考\1到前面来工作。中间部分被捕获为组2,用于替换整个字符串,有效地“提取”它。

llmtgqce

llmtgqce3#

您可以在不同场景之间使用竖条alternate

^(4040)(?:40404040)*$|^(?:4040)+|(?:4040)+$

See this demo at regex101(替换为 * 第一组 * 的$1capture

  1. ^(4040)(?:40404040)*$如果所有字符串都由不均匀数量的4040组成
    这将 * 捕获 * 第一次出现的字符串并将其替换为捕获的值。
  2. |^(?:4040)+或匹配one or more发生次数at the start
  3. |(?:4040)+$或匹配字符串末尾的一个或多个字符
    对于子串(?:的重复,使用非捕获组)

相关问题