【问题标题】:Combining two regular expressions with replaceAll()用 replaceAll() 组合两个正则表达式
【发布时间】:2016-04-19 14:59:17
【问题描述】:

我是正则表达式的新手,我有一个表达式,我必须为工作而编写。我正在考虑使用 replaceAll() 来执行此操作,但我不确定是否可以使用一个正则表达式来执行我建议的操作。

我必须将格式为"abc12378" 的字符串更改为"$$$ $$$ 78"。我可以毫无问题地使用两个不同的正则表达式来做到这一点:

  • 字符串: "abc12378"
  • 正则表达式: "([1-6])"
  • 替换: "\$"
  • 结果: "$$$$$$78"

或者

  • 字符串: "$$$$$$78"
  • 正则表达式: "(.{3})"
  • 替换: "$1 "
  • 结果: $$$ $$$ 78

你知道我是否可以用一个组合的 replaceAll() 来做到这一点吗?

任何帮助将不胜感激。

【问题讨论】:

  • 您可以将三个字符替换为$$$ Find: (.{3}). Replace: $$$
  • 您没有提供任何有关您期望的字符串或要替换它的字符串的信息。你需要只替换前6个字符吗?如果字符串没有 6 个字符怎么办?你为什么用[1-6]?这是否意味着您希望数字的前 3 位小于 6?
  • 字符串总是 8 个字符长(int 或 string)。

标签: java regex


【解决方案1】:

这个replaceAll 调用做你想做的事,实际上它只是用"$$$ " 替换每组3 个字母数字字符:

 String s = "abc12378";
 System.out.println(s.replaceAll("[a-z0-9]{3}", "\\$\\$\\$ "));

输出

$$$ $$$ 78

假设你还有一个角色,你应该这样做:

String s = "123456789";
System.out.println(s.replaceAll("[a-z0-9]{3}(?!$)", "\\$\\$\\$ "));

输出

$$$ $$$ 789

【讨论】:

  • 只是出于好奇(以供将来参考)- 如果最后三个数字也是三个一组怎么办?例如123456789。这行不通,因为它只会将其转换为 XXX XXX XXX 而不是 XXX XXX 789
  • 您只需使用相同的方法,但在从 0 到长度 - 3 的子字符串上,然后将最后 3 个字符附加到它。
  • @menssana 我不是故意粗鲁的,但这应该是真正的评论。如果您认为该问题已得到解答,请添加对问题的评论。有足够的代表。你可以自己投票关闭它。
  • @Oaryx 为什么我的回答不够好​​?你能澄清一下吗?
猜你喜欢
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多