使用模式在java中搜索和替换字符串

时间:2014-01-24 20:51:18

标签: java regex

给出字符串

Content ID [9283745997] Content ID [9283005997] There can be text in between Content ID [9283745953] Content ID [9283741197] Content ID [928374500] There can be valid text here which should not be removed.

我想删除Content ID后跟[9283745997]的文字,方括号之间可以有任何数字。最终我希望结果字符串是

There can be text in between There can be valid text here which should not be removed.

有人可以提供有效的正则表达式来捕获这个重复的文本,但方括号内的数字是唯一的吗?

感谢您的帮助!

我对此的反应是:

Pattern p = Pattern.compile("(Content ID \\[\\d*\\] )");
Matcher m = p.matcher(str);
StringBuffer sb = new StringBuffer();
while(m.find()) {
  m.appendReplacement(sb, "");
}
m.appendTail(sb);
System.out.println(sb);

3 个答案:

答案 0 :(得分:2)

所以基本上你要删除Content ID [one or more digits]中的每一个 为此,您可以使用String类的replaceAll("regex","replacement")方法。作为替换,您可以使用空字符串"" 只留下的问题是你应该使用正则表达式。

  • 匹配Content ID只需将其正常写为"Content ID "
  • 要匹配[],您必须在每个之前添加\,因为它们是正则表达式元字符,您需要转义它们(在Java中,您需要编写{ {1}}为\
  • 表示一个数字(来自范围"\\"的字符)正则表达式使用0-9(再次在Java中,您需要将\d写为\,这将导致"\\" 1}})
  • 说“之前描述的元素中的一个或多个”只是在定义这样的元素之后添加"\\d"。例如,如果您想匹配一个或多个字母+,可以将其写为a

现在你应该能够创建正确的正则表达式了。如果您有任何问题,请随时在评论中提问。

答案 1 :(得分:0)

我会使用正则表达式

Content ID \[\d+\] ?

像这样实施:

str.replaceAll("Content ID \\[\\d+\\] ?", "");

您可以在此处找到解释和演示:http://regex101.com/r/qD5rJ6

答案 2 :(得分:0)

试试这个:

(Content ID \[[0-9]+\])

您可以在此处进行测试:http://regexpal.com/