不应该匹配字符串的奇怪正则表达式语法
本文关键字:正则表达式 语法 字符串 不应该 | 更新日期: 2023-09-27 18:09:05
我正在接管一个c#中的数据挖掘项目,该项目正在解析一些原始文本文件,以便在数据库中存储有用的数据。
现在没有问题,一切都是开箱即用的,但我对一些正则表达式的语法有一个误解。
实际上,为什么表达式Déposé et enregistré le (?<Registred>.+?)'s*('r'n)
匹配字符串Déposé et enregistré le 16/09/2016
我期望正则表达式像Déposé et enregistré le ([0-9]{2}'/[0-9]{2}'/[0-9]{4})
一样匹配我的字符串。
让我迷失的问题是(?<Registred>.+?)
部分,在我看来,它不应该与16/09/2016
这样的日期匹配。
下面是匹配字符串的代码示例:
var results = new List<RegexResult>();
String regexS = r.RegexValue;
try
{
var regex = new System.Text.RegularExpressions.Regex(regexS, RegexOptions.None, new TimeSpan(TimeSpan.TicksPerSecond * 3));
var matchCollection = regex.Matches(data.Data);
if (matchCollection.Count > 0)
{
int occurenceCounter = 0;
foreach (Match match in matchCollection)
{
string[] capturedGroup = regex.GetGroupNames();
foreach (string groupName in capturedGroup)
{
string resultValue = match.Groups[groupName].Value.Trim();
if (groupName != "0")
{
results.Add(new RegexResult(data.Id, r, resultValue, groupName, occurenceCounter));
}
log.Info("RawData Id : {0} | Regex Id : {1} | groupName {2} : {3}", data.Id, r.Id, groupName, resultValue);
}
occurenceCounter++;
}
}
}
catch (RegexMatchTimeoutException e)
{
log.Error("RegexMatchTimeoutException for Id {0} and regex {1}", data, regexS, e);
}
return results;
有什么想法吗?
This:
(?<Registred>.+?)
是一个命名的捕获组。<Registred>
部分实际上不是匹配模式的一部分,而是定义了一个名称,该名称可用于引用括号中的匹配部分。
与以下使用标准捕获组语法的代码相同:
(.+?)
所以它只是匹配一个或多个字符,非贪婪量词使它匹配尽可能少的字符。
因此,该模式将匹配任何以" d