在文本中交换包含列的行

时间:2011-12-07 10:06:59

标签: c# .net regex

我有一个大型VBA脚本文件,它引用了Excel工作表的单元格。问题是我水平放置的应用程序属性的数量变得大于256,因此我必须更改存储属性的方向。

因此,我不想通过.Cells(行,列).Value访问值,而是通过交换上一次调用中的行和列来访问所有内容。

我可以从所有代码中取出并手动更改所有内容,但我更喜欢使用正则表达式。我找到了这个以找到我需要的所有参考文献:

Worksheets\(\"xxx\.DAT\"\)\.Cells\([\w +-]{1,15}, [\w +-]{1,15}\)

结果看起来像这样工作表(“xxx.DAT”)。单元格(SystemNr + 1,21 + Row1)

我想将行与调用 Cells 属性的列交换,因此最终结果应该看起来像工作表(“xxx.DAT”)。单元格(21 + Row1,SystemNr + 1)

我制作了一个小型.NET应用程序并使用下面的代码来获取所有匹配项,但是如何将这些行与匹配项中的列交换?

string input = tbContent.Text;
foreach (Match match in Regex.Matches(input, tbRegex.Text, RegexOptions.IgnorePatternWhitespace))
{
    tbResult.AppendText(match + Environment.NewLine);
}

现在,对于每个匹配,我想获得行索引和列索引之一的引用,以便我可以交换它们并替换原始文本。

谢谢, 阿德里安。

1 个答案:

答案 0 :(得分:2)

我不确定你如何获取数据,但这里有一个关于如何交换两件事的简短c#示例:

String s = "A:B";
Regex r = new Regex(@"(\w):(\w)");

Console.WriteLine(r.Replace(s, "$2:$1"));

如果创建捕获组,则通过将子模式放入括号中,可以访问替换字符串中这些子模式的匹配项。第一组(由第一个开始圆括号定义)由$1访问,第二组由$2访问。因此,在这个基本示例中,只需替换为第二组,第二组替换为第一组,这样就改变了子匹配的顺序。