C# 如何在Word中替换正则表达式而不破坏格式?

C# 如何在Word中替换正则表达式而不破坏格式?,c#,regex,replace,ms-word,C#,Regex,Replace,Ms Word,我正在尝试在Word文档中搜索/替换。但是,字体格式(不仅如此)如粗体/字体系列/颜色等在替换后完全消失。下面是我的代码示例(如果后面跟着希腊字母,它将“a1”替换为希腊字符): 有没有一个简单的方法可以做到这一点 我还尝试了一个更复杂的方法: MatchCollection matches = Regex.Matches(selection.Range.Text, @"(a1)\p{IsGreek}+", RegexOptions.Multiline); foreach (Match matc

我正在尝试在Word文档中搜索/替换。但是,字体格式(不仅如此)如粗体/字体系列/颜色等在替换后完全消失。下面是我的代码示例(如果后面跟着希腊字母,它将“a1”替换为希腊字符):

有没有一个简单的方法可以做到这一点

我还尝试了一个更复杂的方法:

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 = "ά";
}

这种方法保留了格式,但对于非常大的文档,
start
end
索引在一段时间后就会混乱不堪。可能是因为分页符或其他字符,但我还不清楚。

您可以使用一个简单的搜索和替换来实现这一点,因为此功能根本不涉及格式,所以这可能是更好的解决方案。例如,您可以使用此正则表达式进行查找,确保启用“使用通配符”(单击“更多>>”以使此功能在对话框中可见):

[Ά-ω]
将匹配希腊字符(我很确定您在该字符类中拥有大多数希腊字符,如果没有,我愿意更正),并且
@
表示一个或多个

然后在替换中,您可以将其放回:

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

输入:

a1Άλφα
输出:

άΆλφα

正常的搜索和替换不起作用吗?不,我需要使用正则表达式模式进行搜索。您可以在搜索和替换对话框中单击“使用通配符”进行正则表达式搜索,我相信您可以使用
[Α-ϖ]
匹配对话框中的希腊字符(这些是第一个和最后一个希腊字符)。是的,你是对的。但是我想在替换字符串中保留与[Α-ω]匹配的字符。例如,
a1[Α-ω]
-->
ά[Α-ω]
在正则表达式的情况下,
\p{IsGreek}
被保存在输出中。OK!我找到了解决方案:查找:
a1([Α-ω])
,替换:
a1\1
。写下答案,我会接受的。
a1Άλφα
άΆλφα