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();

                }
            }