我正在尝试将/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/