【问题标题】:Implement re.search() functionality in Groovy or Java [duplicate]在 Groovy 或 Java 中实现 re.search() 功能 [重复]
【发布时间】:2019-07-01 15:00:15
【问题描述】:

我需要一个 Groovy/Java 函数来根据正则表达式在字符串中搜索组

例如:

function("([\w-]+)-([\w.-]+)\.([\w.-]+)" ,"commons-collections-3.2.2.jar" )

应该返回一个列表["commons-collections" , "3.2.2" , "jar"]

Python 可以做到这一点

>> import re

>> re.search("([\w-]+)-([\w.-]+)\.([\w.-]+)" ,"commons-collections-3.2.2.jar" )

>> print(result.groups()) 

输出是("commons-collections" , "3.2.2" , "jar")

【问题讨论】:

  • 到目前为止你尝试过什么?为什么它不起作用?请使用您尝试过的代码更新您的问题。

标签: java groovy


【解决方案1】:

这是 groovy 中的一项简单而基本的任务。无论如何,我希望这个答案会对你有所帮助。

"commons-collections-3.2.2.jar".findAll(/([\w-]+)-([\w.-]+)\.([\w.-]+)/) {    
    println it 
}

这将产生输出:

[commons-collections-3.2.2.jar, commons-collections, 3.2.2, jar]

更新:

正如@tim_yates 在评论中提到的,

println "commons-collections-3.2.2.jar".findAll(/([\w-]+)-([\w.-]+)\.([\w.-]+)/) { it.tail() }

这提供了比上面更好的输出,也更具体到任务。

输出:

[[commons-collections, 3.2.2, jar]]

【讨论】:

  • 更好的 (?) 解决方案是:def result = "commons-collections-3.2.2.jar".findAll(/([\w-]+)-([\w.-]+)\.([\w.-]+)/) { it.tail() } 这将返回问题中所需的三个字段
  • @tim_yates 感谢您的建议。我已经相应地更新了我的答案。
猜你喜欢
  • 2023-03-12
  • 2020-03-03
  • 2010-10-11
  • 2014-06-21
  • 1970-01-01
  • 2017-02-03
  • 2014-02-07
  • 1970-01-01
  • 2018-10-10
相关资源
最近更新 更多