我有一个字符串如下:
TEST|A||B|C|**""**|D|""|||||\r\n
TEST|Z||V|P|**""**|Y||||||||\r\n
我需要在 | 的第 5 次和第 6 次出现之间制作内容 如果内容是“”,则为空白。所以想要的输出是
TEST|A||B|C||D|""|||||\r\n
TEST|Z||V|P||Y||||||||\r\n
所以我使用 matcher/pattern 和 matcher.replaceFirst() 使用这个正则表达式模式:
String regexPattern = "TEST.*\\|([|\\|]*)\\|([|\\|]*)\\|([|\\|]*)\\|([|\\|]*)\\|\"\"\\|([|\\|]*)"
虽然我只想要 | 第 5 次和第 6 次出现的“” 要设为 EMPTY,程序将其遇到的所有“”替换为 EMPTY。
所以输出如下:
TEST|A||B|C||D||||||\r\n
TEST|Z||V|P||Y||||||||\r\n
我不确定是否需要更改我拥有的正则表达式模式?或者有没有办法告诉匹配器类告诉它一旦改变了第一个“”,就不要改变那个匹配模式中的其他“”,而是在另一个出现的 TEST 片段中改变它,如果是这样怎么办?
更新:
知道了。对巨大的混乱感到非常抱歉。我将尽我所能,使其尽可能准确/清晰。
问题改写:
我想使用模式在使用 java Pattern 和匹配器类的字符串中进行搜索。
该字符串有两行数据,由 | 分隔。每行由 \r\n\ 分隔
简化示例如下:
测试字符串内容:
TEST|JUNK1|JUNK2|JUNK3|JUNK4|""|JUNK6|""|JUNK8
TEST|JUNK11|JUNK12|JUNK13|JUNK14|""|JUNK16|
我想要 JUNK4| 之后的 "" (该行中 | 的第 5 次和第 6 次出现之间的内容)在上面的示例中被设为空/空白。我不希望该行其他位置的“”改变。下一行也需要发生同样的事情。
因此,我将以下正则表达式模式与 Java Matcher 和 Pattern 类结合使用如下:
String regexPattern = "TEST.*\\|([|\\|]*)(\"\")([|\\|]*)\\|";
但它正在替换每一行中所有出现的“”,这不符合我的要求。
我尝试了量词/POSIX {1},但徒劳地认为它会限制对 TestStr 中第一个“”的搜索,但徒劳无功。
使用 {1} 的正则表达式:
String regexPattern = "TEST.*\\|([|\\|]*)(\"\"){1}([|\\|]*)\\|";
那么如何在模式中进行限制以获取字符串的片段直到第一个“”。