通过在Java中排除一些字符串来替换字符串

时间:2010-08-30 01:50:14

标签: java regex

如何在Java中替换以下字符串:

Sports videos (From 2002 To 2003) here.

Sports videos 2002 2003 here.

我使用了代码,但它删除了整个字符串,即     我得到了这个输出:Sports videos here.

String pattern= "\\((From)(?:\\s*\\d*\\s*)(To)(?:\\s*\\d*\\s*)\\)";

String testStr = "Sports videos (From 2002 To 2003) here.";

String testStrAfterRegex =  testStr.replaceFirst(pattern, "");

这里缺少什么?

由于

日期格式的不同字符串

如果上面的字符串有日期格式化程序(\\)或任何其他字符/单词,那么数字,答案将不起作用

我用这种模式替换原始答案,它会起作用

String pattern= "\\((From)(.*)(To)(.*)\\)";

1 个答案:

答案 0 :(得分:3)

更改为

    String pattern= "\\((From)(\\s*\\d*\\s*)(To)(\\s*\\d*\\s*)\\)";
    String testStr = "Sports videos (From 2002 To 2003) here.";
    String testStrAfterRegex =  testStr.replaceFirst(pattern, "$2 $4");

有两个问题:

<强>第一

您将(?:)放入多年的小组中。这用于不记住这些组。

<强>第二

您不使用组标识符,例如$ 1,$ 2。 我使用$ 2和$ 4来修复第2组和第4组。


修改

清洁解决方案:

    String pattern= "\\(From(\\s*\\d*\\s*)To(\\s*\\d*\\s*)\\)";
    String testStr = "Sports videos (From 2002 To 2003) here.";
    String testStrAfterRegex =  testStr.replaceFirst(pattern, "$1$2");