为字符串写一个正则表达式

时间:2015-01-15 17:28:59

标签: java regex

嗨我有一个包含大量不良数据行的文件。我已经识别出数据不良的行。该文件非常大,无法手动完成。这个问题可能在将来再次出现,所以我在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

1 个答案:

答案 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)