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

标签 java regex

我是 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/

相关文章:

java - 将java代码解析成抽象语法树

java - 使用 Junit 测试 Controller ?

regex - 正则表达式匹配不相等或不反转的数字组

java - iOS 应用程序可以通过蓝牙与 Mac 上的 Java 应用程序通信,而无需创建 OS X 应用程序吗?

java - Java 中的函数 "composition"和类型安全

java - 我们可以使用 '?' 运算符代替嵌套 if 条件吗?

Python 迭代 RegEx 从定界符之间提取文本

regex - 匹配两个关键字之间的文本 block ,但如果关键字位于中间则不匹配

javascript - 如何检查正则表达式中的@?

正则表达式:确定两个正则表达式是否可以匹配同一个输入?