【问题标题】:How to Regex.Replace in Word without destroy the format?如何在不破坏格式的情况下在 Word 中进行 Regex.Replace?
【发布时间】:2014-01-08 22:44:21
【问题描述】:

我正在尝试在 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 = "ά";
}

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

【问题讨论】:

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

标签: c# regex replace ms-word


【解决方案1】:

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

a1([Ά-ω]@)

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

然后在replace中,可以放回去:

ά\1

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

输入:

a1Άλφα

输出:

άΆλφα

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-11
    • 2015-08-29
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2021-12-29
    • 2011-08-19
    • 2010-12-21
    相关资源
    最近更新 更多