【发布时间】:2016-11-29 23:32:33
【问题描述】:
我正在使用 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();
}
【问题讨论】:
-
您永远不应该使用正则表达式来解析 xml 或 html。使用正确的工具。您可以使用 System.Xml 库或 System.Xml.Linq 库。