嗨我有一个包含大量不良数据行的文件。我已经识别出数据不良的行。该文件非常大,无法手动完成。这个问题可能在将来再次出现,所以我在java中编写一个小工具,根据输入正则表达式删除坏段并删除它。
错误数据的一个例子是
ABC*HIK*UG*XY\17
我试图为上面的字符串写一个正则表达式。到目前为止
只有"(^ABC)"
有效且ABC被删除。
当我使用时,没有任何事情发生。
"(^ABC*.XY\17$)"
请提供您的意见。
编辑:
答案是完美的,但
如果我的输入文件包含此
ABC
123
ABC*HIK*UG*XY\17
1025
KHJ*YU*789
我应该得到像
这样的输出ABC
123
1025
KHJ*YU*789
但我得到这样的
ABC
123
1025
KHJ*YU*789
答案 0 :(得分:1)
将您的模式更改为,
"^ABC.*XY\\\\17$"
在java中,您需要再次反斜杠三次才能匹配单个\
字符。并且匹配任何字符零次或多次的模式必须类似于.*
而不是*.
而且您也不需要将模式放在捕获组中。
String s = "ABC\n" +
"123\n" +
"ABC*HIK*UG*XY\\17\n" +
"1025\n" +
"KHJ*YU*789";
System.out.println(s.replaceAll("(?m)^ABC.*XY\\\\17\n?", ""));
输出:
ABC
123
1025
KHJ*YU*789
由于我们在正则表达式中使用锚点,我们需要添加修饰符。在我们的例子中,我们需要添加多行修饰符(?m)