不应该匹配字符串的奇怪正则表达式语法

本文关键字:正则表达式 语法 字符串 不应该 | 更新日期: 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 posise et enregistrele "开头,后跟至少一个字符,然后是换行符的字符串。