regex - Grails/Groovy 正则表达式 ReplaceAll

标签 regex groovy

我正在尝试将/01/插入日期。这是示例日期列表。

Example:
Blah blah 08/2000 blah blah.
Blah 10/2001 blah blah blah.
01/2003 blah blah.

Desired Result:
Blah blah 08/01/2000 blah blah.
Blah 10/01/2001 blah blah blah.
01/01/2003 blah blah.

Actual Result: ( it takes the last match found and replace everything)
Blah blah 01/01/2003 blah blah.
Blah 01/01/2003 blah blah blah.
01/01/2003 blah blah.

这就是我所拥有的。

def MONTH = /\d{1,2}/
def YEAR = /\d{2,4}/
def date = /($MONTH)\W($YEAR)/

(example =~ date).each {match, month, year ->
    def dayDate = month + "/01/" + year
    result = example.replaceAll(~date, dayDate)
}

由于它使用 each 方法,我认为它会插入 /01/ ,但我没想到它会替换最后找到的所有匹配项匹配。 我该怎么做才能插入?

谢谢。

最佳答案

试试这个:

def MONTH = /\d{1,2}/
def YEAR = /\d{2,4}/ 
def date = /($MONTH)\W($YEAR)/  

def example = '''
Blah blah 08/2000 blah blah. 
Blah 10/2001 blah blah blah. 
01/2003 blah blah.
'''

example.replaceAll(~date, { _, month, year -> "${month}/01/${year}" } )

在您的代码中,为每个匹配设置result:因此只有“result”的最后一个值是最后一个匹配的值。在最后一个匹配中,您要将日期模式的所有匹配替换为最后一个匹配的值。

在 groovy 中,replaceAll 可以采用闭包,在这种情况下,对于正则表达式的每个匹配,匹配项都会被闭包的返回值替换。

关于regex - Grails/Groovy 正则表达式 ReplaceAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36186987/

相关文章:

ruby-on-rails - ruby rails : Unable to retrieve regex from database

regex - 如何在我想禁止字符而不是允许字符的地方指定特定长度的正则表达式?

groovy - 通过名称访问变量值作为 String (groovy)

groovy - 如何在Groovy中序列化自定义对象

java - 如何使用正则表达式将字符串拆分为数组(通过不在括号内的逗号)?

python - 如何从字符串python中删除所有表情符号(unicode)字符

javascript - 如何用取决于被替换位的内容替换字符串的一部分?

groovy - 如何在JSR223的Groovy类中使用JMeter的内部方法(vars.get()等)

java - 如何从 gradle 任务运行 groovy 方法?

java - 如何显示 Groovy AntBuilder 类路径中包含的所有资源?