ER430;000000000;
ADR03;000000020;
RID01;000000000;
RID02;000000000;
我在包含换行符的字符串中包含上述内容。现在我想剪线
因此仅保留带有前导“ R”的行。结果应为:
RID01;000000000;
RID02;000000000;
不幸的是,经过几个小时的尝试,我仍然没有找到解决方案。
任何帮助!
我的一些测试:
content = s.replaceAll("[^R].+;{1}.+;{1}", "");
content = s.replaceAll("(?!R).*;{1}.*;{1}", "");
content = s.replaceAll("(?!R)(.+;)(.+;)", "");
所有这些都不能完全带来解决方案。
最佳答案
使用多行标志(?m)
(使^
和$
在换行符匹配)和DOTALL标志(?s)
(使点与换行符匹配):
str = str.replaceAll("(?sm)^[^R].*?(^|\\Z)", "");
开始很简单-一个非R字符,然后
.*?^
会抓取直到下一行开头的所有字符-包括换行符char添加\Z
的替代结尾也要适应最后被删除的行。请参见live demo,其中包括最后一行删除的边缘情况。