【问题标题】:Regex to replace everything except trailing digits [duplicate]正则表达式替换除尾随数字以外的所有内容[重复]
【发布时间】:2017-10-03 07:52:23
【问题描述】:

这应该很简单,但我找不到答案,也找不到答案。我有一个字符串,它总是有一个或多个尾随数字,其他地方可能还有其他数字。我想从字符串中删除除所有尾随数字之外的所有内容。

一些示例测试用例:

"1 test50"               ->  "50"
"anothertest10"          ->  "10"
"can contain spaces123"  ->  "123"
"ok1"                    ->  "1"

我尝试了最明显的东西:str.replaceAll(".*(\\d)+$","$1"),但不幸的是.*首先匹配,所以对于上面的测试用例,它将导致0,0,3,1而不是50,10,123,1

我觉得我需要使用后视或其他东西,尽管我过去几乎没有使用过它们,而且我不知道如何将它应用到我的问题上。

【问题讨论】:

  • (.*?)(\d+)$ Link
  • 基本上,您可以将字符串末尾的数字与[0-9]+$ 模式匹配。为什么要使用replaceAll?编辑:您不妨使用str.replaceFirst("(?s)(?:.*\\D)?(\\d+)$","$1") 更快地到达字符串末尾并支持字符串中的换行符。但是看起来是不是很麻烦?
  • @Gurman 谢谢!str.replaceAll(".*?(\\d+)$","$1") 工作。

标签: java regex string digits replaceall


【解决方案1】:

你可以使用正则表达式

\d+$

将匹配所有尾随数字,请参阅regex101 demo

【讨论】:

  • 我知道.. 但是如何使用replaceAll.. 删除其他所有内容。(您是否已阅读问题描述而不仅仅是标题?...)
  • 你为什么要全部替换?
  • 我个人认为它比带有匹配器迭代的 Pattern.compile 更容易阅读和更短。我猜是偏好.. 仍然感谢您的回答,但我已经知道 \\d+$ 做了什么..
猜你喜欢
  • 2014-08-10
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多