如何在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)(.*)\\)";
答案 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");