繁体   English   中英

如何在不破坏格式的情况下在Word中进行正则表达式替换?

[英]How to Regex.Replace in Word without destroy the format?

我正在尝试在Word文档中进行搜索/替换。 但是,替换后,字体格式(不仅是粗体/字体系列/颜色等)完全消失了。 这是我的代码示例(如果后面跟有希腊字母,则用希腊字符替换“ 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 = "ά";
}

这种方法可以保留格式,但是在文档非常大的情况下, start索引和end索引会在一段时间后弄乱。 可能是因为分页符或其他字符引起的,但我还不能弄清楚。

您可以使用简单的“搜索并替换”来执行此操作,并且由于此功能完全不涉及格式设置,因此这可能是更好的解决方案。 例如,您可以将此正则表达式用于“查找”,并确保启用“使用通配符”(单击“更多>>”以使此功能在对话框中可见):

a1([Ά-ω]@)

[Ά-ω]将匹配希腊字符(我敢肯定您拥有该字符类中的大多数希腊字符,如果不是,我愿意接受更正),并且@表示一个或多个。

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

ά\1

\\1表示我们之前匹配的希腊字符捕获组。

输入:

a1Άλφα

输出:

άΆλφα

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM