Java6匹配器类
我有一个字符串,如下所示:Java6匹配器类,java,matcher,Java,Matcher,我有一个字符串,如下所示: TEST|A||B|C|**""**|D|""|||||\r\n TEST|Z||V|P|**""**|Y||||||||\r\n TEST|A||B|C||D||||||\r\n TEST|Z||V|P||Y||||||||\r\n String regexPattern = "TEST.*\\|([|\\|]*)(\"\")([|\\|]*)\\|";
TEST|A||B|C|**""**|D|""|||||\r\n
TEST|Z||V|P|**""**|Y||||||||\r\n
TEST|A||B|C||D||||||\r\n
TEST|Z||V|P||Y||||||||\r\n
String regexPattern = "TEST.*\\|([|\\|]*)(\"\")([|\\|]*)\\|";
如果内容为“”,我需要将第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次出现的|中的“”变为空,但program正在将遇到的所有“”替换为空
因此,输出如下所示:
TEST|A||B|C|**""**|D|""|||||\r\n
TEST|Z||V|P|**""**|Y||||||||\r\n
TEST|A||B|C||D||||||\r\n
TEST|Z||V|P||Y||||||||\r\n
String regexPattern = "TEST.*\\|([|\\|]*)(\"\")([|\\|]*)\\|";
我不确定是否需要更改我拥有的正则表达式模式?或者有没有一种方法可以告诉matcher类,一旦它更改了匹配模式中的第一个“不要更改其他”,而是在测试片段的其他出现处更改它,如果有,如何更改
更新:
明白了。非常抱歉造成了巨大的混乱。我会尽我最大的努力使它尽可能精确/清晰
问题改为:
我想使用一个模式来使用java模式和matcher类在字符串中搜索
字符串有两行,数据用|分隔,每行用\r\n分隔\
简化示例如下:
TEST|A||B|C|**""**|D|""|||||\r\n
TEST|Z||V|P|**""**|Y||||||||\r\n
TEST|A||B|C||D||||||\r\n
TEST|Z||V|P||Y||||||||\r\n
String regexPattern = "TEST.*\\|([|\\|]*)(\"\")([|\\|]*)\\|";
测试字符串内容:
TEST|JUNK1|JUNK2|JUNK3|JUNK4|""|JUNK6|""|JUNK8
TEST|JUNK11|JUNK12|JUNK13|JUNK14|""|JUNK16|
在上面的示例中,我希望将JUNK4 |之后的“”(第5到第6行中出现的|之间的内容)设置为空/空白。
我不希望该行其他位置的“”发生变化。同样的事情需要在下一行发生
因此,我将以下正则表达式模式与Java Matcher结合使用,模式类如下:
TEST|A||B|C|**""**|D|""|||||\r\n
TEST|Z||V|P|**""**|Y||||||||\r\n
TEST|A||B|C||D||||||\r\n
TEST|Z||V|P||Y||||||||\r\n
String regexPattern = "TEST.*\\|([|\\|]*)(\"\")([|\\|]*)\\|";
但它正在替换每一行中出现的所有“”,这不符合我的要求
我尝试了quantifier/POSIX{1},但徒劳地认为它会限制对TestStr中第一个“”的搜索,但徒劳
使用{1}的正则表达式:
String regexPattern = "TEST.*\\|([|\\|]*)(\"\"){1}([|\\|]*)\\|";
因此,如何在模式中进行限制以获取字符串片段,直到第一个“。一个不使用复杂正则表达式的简单答案:
String temp[] = inputString.split("\\|");
if ("\"\"".equals(temp[5]))
{
temp[5] = "";
StringBuilder buf = new StringBuilder();
for (String s : temp)
buf.append("|").append(s);
inputString = buf.substring(1);
}
同时,注意别人对你说的话。使用编辑工具,不要将更正作为答案。这是关于这些regexp怪物的第五个问题。将此视为你使用错误方法的迹象,并重新思考你在做什么。为你的格式编写一个解析器,或者在这里解释你的问题并征求意见,但请停止。这并不是说正则表达式是错误的方法,而是你不断地提出新的问题,一个和另一个一样不精确,与所述规范不匹配的简化示例相互矛盾,并且随着问题的不断变化。另外,你显然不太关心这个问题,以至于无法回答潜在的回答者要求你澄清的问题。没有人关心你的截止日期,但我们想要一个可以回答的问题,而你的不是。