我想让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。
3条答案
按热度按时间jslywgbw1#
为什么要使用正则表达式?让自己的生活更轻松:
(伪代码)
apeeds0o2#
试试这个:
这通过要求相同的输入前后通过向后参考
\1
到前面来工作。中间部分被捕获为组2
,用于替换整个字符串,有效地“提取”它。llmtgqce3#
您可以在不同场景之间使用竖条alternate:
See this demo at regex101(替换为 * 第一组 * 的
$1
、capture)^(4040)(?:40404040)*$
如果所有字符串都由不均匀数量的4040
组成这将 * 捕获 * 第一次出现的字符串并将其替换为捕获的值。
|^(?:4040)+
或匹配one or more发生次数at the start|(?:4040)+$
或匹配字符串末尾的一个或多个字符对于子串
(?:
的重复,使用非捕获组)
。