硬编码值或正则表达式转换

时间:2013-08-13 16:02:45

标签: regex replace expression

我有一个正则表达式,我花时间在这里写研究,但它并没有做我想要的。我试图提取的价值是这样的:

DATE OF SURGERY:  08/06/2013 

我想拉日期,但我想把斜杠变成破折号。我写了这个:

(?<=DATE OF SURGERY: *)\d{1,2}/\d{1,2}/\d{1,4}

这让我可以撤回08/06/2013,但我需要它撤回08-03-2013。有没有办法让我在正则表达式中对破折号进行硬编码?或者是否有替换方式我可以用破折号替换斜线?谢谢大家

1 个答案:

答案 0 :(得分:1)

如果您想要匹配DATE OF SURGERY: 08/06/2013DATE OF SURGERY: 08-06-2013等字符串,那么您可以使用此模式:

(?<=DATE OF SURGERY: *)\d{1,2}[/-]\d{1,2}[/-]\d{1,4}

但是这也可以捕捉混合斜线或连字符DATE OF SURGERY: 08/06-2013。如果您只想获得两个斜杠或两个连字符,则需要使用后引用:

(?<=DATE OF SURGERY: *)\d{1,2}([/-])\d{1,2}\1\d{1,4}

如果您的意思是您希望使用正则表达式将DATE OF SURGERY: 08/06/2013替换为DATE OF SURGERY: 08-06-2013,那么您需要使用这样的替换模式:

match: (?<=DATE OF SURGERY: *)(\d{1,2})([/-])(\d{1,2})\2(\d{1,4})

replace: \1-\3-\4

例如,这是C#,但您使用的实际代码将取决于您的特定语言和正则表达式引擎:

Regex.Replace(input, 
    @"(?<=DATE OF SURGERY: *)(\d{1,2})([/-])(\d{1,2})\2(\d{1,4})",
    @"\1-\3-\4");