正则表达式循环遍历foreach以找到某种模式

时间:2016-11-29 14:08:59

标签: c# xml

我正在使用openXML,我正在尝试遍历excel文件以查看是否有任何匹配特定模式。我的正则表达式模式是休闲@"(?<!\w)#\w+"。这应该返回以“#”开头的任何内容。在我的excel工作簿xml中有许多以“#”开头的已定义名称,例如<definedName name="_KEY" hidden="1" localSheetId="3">#REF!</definedName>。但是,当我尝试找到已定义的名称时,我的计数返回零。

我的代码是休闲

首先,我浏览文件并选择文件。我确保这完美无缺。

然后我尝试计算并循环完成每场比赛,这就是我遇到问题的地方。我假设我弄乱了foreach循环,我真的需要一些指导。

    var spreadsheet = DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(filePath, false);
    var workbook = spreadsheet.WorkbookPart;
    var names = workbook.Workbook.DefinedNames;




    //result.InactiveNamedRangeCount = names.Where(n => n.InnerText.Contains(pattern)).Count();

    foreach (Match match in Regex.Matches(names.ToString(), @"(?<!\w)#\w+"))
    {
            result.InactiveNamedRangeCount = names.Where(n => n.InnerText.Contains(match.ToString())).Count();

    }

1 个答案:

答案 0 :(得分:1)

检查names.ToString()返回的内容,你不应该在它上运行正则表达式。

要获取与您的模式匹配的DefinedNames数量,您可以使用:

names.Count(n => Regex.IsMatch(n.InnerText, @"(?<!\w)#\w+"));