Foreach 循环使用 Regex 查找 XML 模式
Foreach loop using Regex to find XML pattern
我创建了一个正则表达式模式,可以在我的 excel 文件中找到所有 #REF
。我创建了一个 foreach
循环到 return 所有 #REF
并在控制台中播放它们以及它们的数量。这很好用。然而,我随后创建了一个 foreach
循环来删除所有 #REF
引用,但每次我 运行 项目时它只删除一个。我已经对此进行了调试,并且在 Regex 下次进入 foreach 时在 if 语句中找到匹配项后,它会跳过 if 语句,就好像它找不到另一个匹配项一样。我不确定这是为什么
我的代码是休闲的
编码为 return 所有 #ref 值
using (var spreadsheet = DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(@"C:\Users\Craig\Desktop\newTest.xlsx", true))
{
var workbook = spreadsheet.WorkbookPart;
Workbook w = new Workbook();
var names = workbook.Workbook.DefinedNames;
var work = workbook.Workbook;
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"#REF");
int count = result.InactiveNamedRangeCount = names.Count(n => regex.IsMatch(n.InnerText));
Console.WriteLine(count);
foreach (var name in names)
{
if (regex.IsMatch(name.InnerText))
{
Console.WriteLine(name.InnerText);
}
}
用于删除每个 #REF
值的代码
foreach (var name in names)
{
if (regex.IsMatch(name.InnerText))
{
name.Remove();
work.Save();
}
}
Console.WriteLine(count);
Console.ReadKey();
}
问题的解决方案是我需要在我的名称变量中添加一个 ToList
。
foreach (var name in names.ToList())
{
if (regex.IsMatch(name.InnerText))
{
name.Remove();
work.Save();
}
}
我创建了一个正则表达式模式,可以在我的 excel 文件中找到所有 #REF
。我创建了一个 foreach
循环到 return 所有 #REF
并在控制台中播放它们以及它们的数量。这很好用。然而,我随后创建了一个 foreach
循环来删除所有 #REF
引用,但每次我 运行 项目时它只删除一个。我已经对此进行了调试,并且在 Regex 下次进入 foreach 时在 if 语句中找到匹配项后,它会跳过 if 语句,就好像它找不到另一个匹配项一样。我不确定这是为什么
我的代码是休闲的
编码为 return 所有 #ref 值
using (var spreadsheet = DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(@"C:\Users\Craig\Desktop\newTest.xlsx", true))
{
var workbook = spreadsheet.WorkbookPart;
Workbook w = new Workbook();
var names = workbook.Workbook.DefinedNames;
var work = workbook.Workbook;
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"#REF");
int count = result.InactiveNamedRangeCount = names.Count(n => regex.IsMatch(n.InnerText));
Console.WriteLine(count);
foreach (var name in names)
{
if (regex.IsMatch(name.InnerText))
{
Console.WriteLine(name.InnerText);
}
}
用于删除每个 #REF
值的代码
foreach (var name in names)
{
if (regex.IsMatch(name.InnerText))
{
name.Remove();
work.Save();
}
}
Console.WriteLine(count);
Console.ReadKey();
}
问题的解决方案是我需要在我的名称变量中添加一个 ToList
。
foreach (var name in names.ToList())
{
if (regex.IsMatch(name.InnerText))
{
name.Remove();
work.Save();
}
}