2013-12-20 2 views
1

Я пытаюсь найти/заменить в документе Word. Однако формат шрифта (и не только), как жирный шрифт/семейство/цвета и т. Д., Полностью исчез после замены. Вот пример моего кода (он заменяет «a1» с греческим характером, если греческие буквы следует):Как Regex.Replace в Word без разрушения формата?

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 индексы перепутались через некоторое время. Вероятно, из-за разрывов страниц или других персонажей, но я пока не могу понять.

+0

Не обычный поиск и замена сделать трюк? – Jerry

+0

Нет, мне нужно искать с использованием шаблона регулярных выражений. –

+0

Вы можете выполнить поиск по регулярному выражению в диалоговом окне «Поиск и замена», нажав «Использовать подстановочные знаки», и я считаю, что вы можете использовать '[Α-π]' для сопоставления греческих символов в диалоговом окне (это первые и последние греческие символы). – Jerry

ответ

1

Вы можете использовать простой поиск & Заменить для этого, и так как эта функция вообще не касается форматирования, это может быть лучшим решением. Например, вы можете использовать это регулярное выражение для Find, убедившись, что для того, чтобы «использовать подстановочные знаки» (нажать кнопку «Далее >>», чтобы получить эту функцию, видимую в диалоговом окне):

a1([Ά-ω]@) 

[Ά-ω] будет соответствовать греческому (я уверен, что у вас больше всего не всех греческих персонажей в этом классе персонажей, если нет, я открыт для исправлений), а @ означает один или несколько.

Тогда в замене, вы можете положить его обратно:

ά\1 

\1 будет относиться к группе захвата греческих символов мы совпавших ранее.

Вход:

a1Άλφα 

Выход:

άΆλφα 
Смежные вопросы