Java 正则表达式 : Replace part of source string

标签 java regex

如果源字符串包含模式,则将其替换为某些内容或将其删除。一种方法是做这样的事情

Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(sourceString);
while(m.find()){
  String subStr = m.group().replaceAll('something',""); // remove the pattern sequence
  String strPart1 = sourceString.subString(0,m.start());
  String strPart2 = sourceString.subString(m.start()+1);
  String resultingStr = strPart1+subStr+strPart2;
  p.matcher(...);
}

但是我想要这样的东西

Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(sourceString);
    while(m.find()){
      m.group.replaceAll(...);// change the group and it is source string is automatically updated    
}

这可能吗?

谢谢

最佳答案

// change the group and it is source string is automatically updated

在 Java 中无法更改任何字符串,因此您所要求的是不可能的。

删除替换一个带有字符串的模式可以通过像

这样的调用来实现
someString = someString.replaceAll(toReplace, replacement);

转换匹配的子字符串,正如您的行所指示的那样

m.group().replaceAll("something","");

最好的解决方案可能是使用

  • 结果的 StringBuffer
  • Matcher.appendReplacementMatcher.appendTail

例子:

String regex = "ipsum";
String sourceString = "lorem ipsum dolor sit";

Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(sourceString);
StringBuffer sb = new StringBuffer();

while (m.find()) {
    // For example: transform match to upper case
    String replacement = m.group().toUpperCase();
    m.appendReplacement(sb, replacement);
}

m.appendTail(sb);

sourceString = sb.toString();

System.out.println(sourceString); // "lorem IPSUM dolor sit"

关于Java 正则表达式 : Replace part of source string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7764515/

相关文章:

java - 密码正则表达式不起作用

java - Websphere 管理工具

java - 是否有 dependentOnMethods TestNG 功能的隐式替代方案? (按相关顺序运行测试)

c# - 正则表达式与字符串操作函数 : What is better

python - 简单的正则表达式 Python

php - 在 RegEx 中使用单词边界 (\b) 我需要在单词之前和之后,还是之前?

java - 如何在android中获取图像的(x,y)坐标?

java - 检查 Java 十进制格式是否正确

java - 无论如何都有一个维度的链接列表吗?像(x,y)?

regex - mod_rewrite : can a back reference be referenced twice?