Regex Scala正则表达式中的可选分组
假设我想制作一个正则表达式,将可选版本号从文件名中分离出来,例如Regex Scala正则表达式中的可选分组,regex,scala,Regex,Scala,假设我想制作一个正则表达式,将可选版本号从文件名中分离出来,例如 val regex(name, ver) = "file.jar" // name = file, ver = empty val regex(name, ver) = "some-software.jar" // name = some-software, ver = empty val regex(name, ver) = "software-1.0.jar" // name = software, ver
val regex(name, ver) = "file.jar" // name = file, ver = empty
val regex(name, ver) = "some-software.jar" // name = some-software, ver = empty
val regex(name, ver) = "software-1.0.jar" // name = software, ver = 1.0
val regex(name, ver) = "some-file-1.0.jar" // name = some-file, ver = 1.0
这样的正则表达式是如何用Scala/Java编写的?。在perl中,我将按照以下思路进行操作:
(.*)(\d |.*)?.jar
但是Scala不支持使用这种语法创建可选组。我不确定您现在的问题是什么 我假设它与第二组不匹配,因为第一组是贪婪的,而第二组是可选的,所以第一组匹配所有内容 试试这个:
(.*?)(?:-(?=\d)(.*))?.jar
看到了吗
*?
(?:
开头的组)。您现在可以在组1中找到名称,在组2中找到版本/^(.+?)(?:-([\d.]*))?\.jar$/
假设这个版本总是由数字和点混合而成。非常感谢它能起作用,我将尝试重新表述我的问题,以便对扩展的解释更有意义。