Java正则表达式替换开头的每个数字

标签 java regex

如何使用正则表达式将单词开头的每个数字替换为下划线字符,以及将单词其余部分中除字母、数字、破折号和点之外的所有字符替换为下划线?

我尝试了这个正则表达式:

^(\d+)|[^\w-.]

但是,它会将开头的所有数字替换为单个下划线字符。

因此,34567fgf-kl.)*/676hh 转换为 _fgf-kl.___676hh 而我需要将开头的每个数字替换为一个下划线字符就像_____fgf-kl.___676hh

是否可以使用正则表达式来实现?

最佳答案

您可以像这样将 Matcher.appendReplacementMatcher.find 一起使用:

String fileText = "34567fgf-kl.)*/676hh";
String pattern = "^\\d+|[^\\w.-]+";

Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(fileText);

StringBuffer sb = new StringBuffer();
while (m.find()) {
  m.appendReplacement(sb, repeat("_", m.group(0).length()));
}
m.appendTail(sb); // append the rest of the contents
System.out.println(sb);

重复

public static String repeat(String s, int n) {
    if(s == null) {
        return null;
    }
    final StringBuilder sb = new StringBuilder(s.length() * n);
    for(int i = 0; i < n; i++) {
        sb.append(s);
    }
    return sb.toString();
}

参见 IDEONE demo

此外,可以使用 Commons Lang StringUtils.repeat()repeat 替换为 Stringrepeated = StringUtils.repeat("_", m.group(0).length());

关于Java正则表达式替换开头的每个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32018881/

相关文章:

java - IntelliJ IDEA 中的@param 和@return 等标签是什么?

python - 从文件中删除所有非字母数字字符并在 python 中使用相同的名称保存它

java - 正则表达式 - 用大写字母替换下划线小写字母

c# - 搜索和替换 C# 表达式

Javascript:正数和负数的正则表达式,但没有小数点

java - 反射。执行带参数的非静态方法

java - 如何以编程方式获取 android exoplayer 中的帧速率?

java - 如何获取包含在指定字符串中的特定字符串?

java - 为多个子节点设置值 Firebase

javascript - 检查值是否具有给定字符 - RegEx