Regex Grails/Groovy正则表达式ReplaceAll
我正在尝试将/01/插入日期。以下是示例日期列表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
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