Соотнесите Range.Text с Range.Start и Range.End - PullRequest
3 голосов
/ 22 сентября 2010

Я использую регулярные выражения для поиска по простому тексту, возвращенному следующим свойством:

namespace Microsoft.Office.Interop.Word
{
    public class Range
    {
        ...
        public string Text { get; set; }
        ...
    }
}

На основе совпадений я хочу внести изменения в форматированный текст, который соответствует простому тексту.У меня проблема в том, что индексы символов в свойстве .Text не совпадают со свойствами .Start и .End объекта Range.Кто-нибудь знает какой-либо способ сопоставить эти показатели?

(я не могу использовать возможности поиска по шаблону Word (в качестве замены для регулярных выражений .NET), потому что они недостаточно мощны для шаблонов, которые я ищу (не жадные операторы и т. Д.))

Я могу переместить правильное количество символов, начиная с Document.Range().Collapse(WdCollapseStart), а затем range.MoveStart(WdUnitChar, match.Index), поскольку перемещение по символам совпадает с позицией форматированного текста и совпадает с совпадениями в простом тексте.

Моя проблема сейчас в том, что я всегда на 4 символа слишком далеко в форматированном тексте ... так что, может быть, это как-то связано с другими сюжетными диапазонами?Я не уверен ...

1 Ответ

1 голос
/ 29 сентября 2010

Очевидно, причина, по которой мои спички все еще были выключены, была связана со скрытыми персонажами "Белла" (char bell = '\a';).Заменив их пустой строкой внутри Application.ActiveDocument.Range().Text, мои совпадения по этому свойству теперь будут корректно соответствовать диапазону, достигаемому с помощью:

Word.Range range = activeDocument.Range();
range.Collapse(Word.WdCollapseStart);
range.MoveStart(Word.WdUnits.Character, regexMatch.Index);

По сути, вы можете отразить индексы в свойстве .Text, перемещаясь поформатированный текст посимвольный.Единственное предостережение в том, что вам нужно удалить странные символы, такие как символ колокольчика, из свойства .Text.

...