如何Regex.Replace in Word而不破坏格式?

时间:2013-12-20 06:09:11

标签: c# regex replace ms-word

我正在尝试在Word文档中搜索/替换。但是,替换后,字体格式(而不仅仅是粗体/字体系列/颜色等)完全消失了。这是我的代码示例(它取代了#34; a1"带有希腊字符,如果希腊字母跟随):

Word.Selection selection = this.Application.Selection;
selection.Range.Text = Regex.Replace(selection.Range.Text, @"(a1)\p{IsGreek}+", "ά");

有没有直接的方法呢?

我还尝试了一个更复杂的问题:

MatchCollection matches = Regex.Matches(selection.Range.Text, @"(a1)\p{IsGreek}+", RegexOptions.Multiline);
foreach (Match match in matches)
{
    object start = match.Groups[1].Index;// -counter * (match.Groups[1].Length - 1);
    object end = (int)start + match.Groups[1].Length;
    Word.range l_rng = doc.Range(ref start, ref end);
    l_rng.Text = "ά";
}

这种方法保留了格式,但是对于非常大的文档,startend索引会在一段时间后搞砸。可能是因为分页符或其他字符,但我还不知道。

1 个答案:

答案 0 :(得分:1)

您可以使用简单的搜索&替换为此,由于此功能根本不触及格式,这可能是更好的解决方案。例如,您可以将此正则表达式用于查找,确保启用“使用通配符”#39; (点击'更多>>'以在对话框中显示此功能):

a1([Ά-ω]@)

[Ά-ω]会匹配希腊字符(我非常确定你拥有大部分字符,而不是所有希腊字符,如果没有,我可以更正)和{{ 1}}表示一个或多个。

然后在替换中,你可以把它放回去:

@

ά\1 将引用我们之前匹配的希腊字符捕获组。

输入:

\1

输出:

a1Άλφα