【发布时间】: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 = "ά";
}
这种方法保留了格式,但在非常大的文档的情况下,start 和 end 索引会在一段时间后搞砸。可能是因为分页符或其他字符,但我还想不通。
【问题讨论】:
-
普通的搜索和替换不能解决问题吗?
-
不,我需要使用正则表达式模式进行搜索。
-
您可以通过单击“使用通配符”在“搜索和替换”对话框中进行正则表达式搜索,我相信您可以使用
[Α-ϖ]来匹配对话框中的希腊字符(那些是第一个和最后一个希腊字符)。 -
是的,你是对的。但是...我想在替换字符串中保留与 [Α-ω] 匹配的字符。例如。
a1[Α-ω]-->ά[Α-ω]在正则表达式的情况下,\p{IsGreek}保留在输出中。 -
好的!我找到了解决方案:查找:
a1([Α-ω]),替换:a1\1。写下答案,我会接受的。