2016-11-29 33 views
0

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

我的代码休耕

首先我浏览文件,并选择该文件。我确信,这是完美的。

然后,我尝试做一个计数,并循环通过每场比赛,它在这里我有我的问题。我假设我搞乱了我的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(); 

    } 
+0

你不应该使用正则表达式解析XML或HTML。使用正确的工具。您可以使用System.Xml库或System.Xml.Linq库。 – jdweng

回答

1

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

要获得符合模式DefinedNames的数量,你可以使用:

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

我应该将此添加到我的foreach循环还是需要摆脱我的foreach循环? –

+0

嘿,我编辑了答案,它应该反映你现在的需求。 –

+0

这似乎工作。非常感谢你 :) –