【发布时间】:2010-09-28 15:52:59
【问题描述】:
我是 Java 正则表达式的新手。
抱歉,发帖太长了。
我有三个要求:
1a) 我有一个包含三个单词“TEST”的字符串。每个单词后跟 ^ ,我需要检查 ^ 的第 2 次和第 3 次出现之间的内容是否为空白,如果是空白/空则进一步搜索以查看 ^ 的第 5 次和第 6 次出现之间的内容是否为“” 如果是“”,则将其替换为空白/空 例子: 现有字符串:
aaaa^
TEST^x^^y^z^""^cccc^bbb^
预期字符串:
aaaa^
TEST^x^^y^z^^cccc^bbb^
1b) 如果 ^ 的第 2 次和第 3 次出现之间的内容不是空白且不是 "",则不要更改第 5 次和第 6 次出现之间的内容
现有字符串:
TEST^p^^q^r^""^lll^mmm^
预期字符串:
TEST^p^^q^r^""^lll^mmm^
每当找到 TEST 字时,我都需要重复此逻辑检查。
1c) 如果 ^ 的第 5 次和第 6 次出现之间的内容不是空白且不是 "",并且如果第 2 次和第 3 次之间的内容为空白/空,则将其替换为 STR。
现有字符串:
TEST^g^^q^r^YYY^lll^mmm^
预期字符串:
TEST^g^STR^q^r^YYY^lll^mmm^
我需要在 Java 正则表达式中完成上述所有情况。我可以根据我之前在这个论坛上发帖的宝贵意见来制作案例 1。我无法使案例 2 和 3 工作。
如何在同一个正则表达式中完成案例 2 和 3(我不确定正则表达式用于非空 contnet 检查和“或”检查)。 在非正则表达式的世界中,在普通的 if else 方法中,我可以处理以下 3 种情况:
if (the content between 2nd and 3rd occurence of ^ is empty)
{
if(content between 5th and 6th occurence of ^ is "")
{
make this content empty
}
else
{
set the content between 2nd and 3rd occurence of ^ as STR
}
}
但由于我需要对字符串中以 TEST 开头的每一行进行此项检查,因此我倾向于使用正则表达式。
到目前为止,适用于案例 1 的正则表达式如下:
str.replaceAll("(TEST\\^[^^]*\\^\\^[^^]*\\^[^^]*\\^)\"\"", "$1")
对于第二种情况,我尝试如下修改上述正则表达式,但徒劳无功(尝试在第 2 次和第 3 次出现之间搜索非空值,其中我假设 *\\d0$ 表示空,[\\d0$] 表示非空):
str.replaceAll("(TEST\\^[^^]*\\^[^\\d0$]\\^[^^]*\\^[^^]*\\^)\"\"", "$1")
非常感谢任何帮助提出处理上述 3 个用例的正则表达式,因为我有一个截止日期来完成这项任务。
非常感谢任何帮助。
提前致谢。
【问题讨论】:
-
您的 1a 和 1b 示例字符串是等价的 - 区别在哪里?像
TEST^x^""^y^z^""^aaa这样的字符串会发生什么? -
您可能应该编辑您的原始问题,而不是开始一个新问题。不过现在关闭可能为时已晚。
-
你得到了很多有用的答案,别忘了接受对你最有帮助的答案(并投票给其他人)。