Regex Grails/Groovy正则表达式ReplaceAll

Regex Grails/Groovy正则表达式ReplaceAll,regex,groovy,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

我正在尝试将/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)
}
由于它使用了
每个
方法,我原以为它会按原样插入
/01/
,但我没想到它会将所有匹配项替换为最后找到的匹配项。 我可以做什么来插入


谢谢。

通过捕获组,您可以捕获
月份
年份
,并在两者之间替换
日期

正则表达式:
/(\d{2})\/(\d{4})/

要使用的标志:

  • g
    用于全局搜索
替换操作:替换为
\1/01/\2


另一种解决方案是使用像这样的
lookaround
断言

正则表达式:
(?试试这个:

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可以接受闭包,在本例中,对于正则表达式的每个匹配项,匹配项都被闭包的返回值替换。

谢谢,它进行了一些语法更改。我使用了
example.replaceAll(date){match,month,year->“${month}/01/${year}”
谢谢。很高兴知道。我查看了Regex101.com。这太棒了。我希望他们有Groovy或Java代码生成器。@monty_bean:一定有一个。Java在线测试人员:,。谢谢@WiktorStribiżew