gpt4 book ai didi

java regex - 搜索两次出现的搜索字符之间的空内容

转载 作者:行者123 更新时间:2023-12-02 08:29:29 25 4
gpt4 key购买 nike

我是 java 正则表达式新手。

抱歉发了这么长的帖子。

我有三个要求:

1a) 我有一个字符串,其中包含 3 次出现的单词“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 检查和“OR”检查)。在非正则表达式世界中,在简单的 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") 

对于第二种情况,我尝试按如下方式修改上述正则表达式,但徒劳无功(尝试搜索第二次和第三次出现之间的非空值,其中我假设 *\\d0$ 代表 EMPTY 和 [\\d0$] 暗示 NOT EMPTY):

str.replaceAll("(TEST\\^[^^]*\\^[^\\d0$]\\^[^^]*\\^[^^]*\\^)\"\"", "$1") 

任何关于提出处理上述 3 个用例的正则表达式的帮助都将受到高度赞赏,因为我必须在截止日期前完成这项任务。

非常感谢任何帮助。

提前致谢。

最佳答案

在我看来,^ 是一个分隔符。因此,如果您只需在分隔符处拆分字符串并使用数组,事情就会变得更加轻松:

List<String> lines = FileUtils(myFile, myEncoding);
List<String[]> allValues = new ArrayList<String[]>();
for (String line: lines)
allValues.add(line.split("\\^"));

上面的示例展示了使用 apache-commons-io 处理整个 csv 文件的方法。

关于java regex - 搜索两次出现的搜索字符之间的空内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3784464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com