我正在使用正则表达式来搜索以下属性返回的纯文本:
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个字符太远......所以它可能与其他故事范围有关吗?我不确定......
答案 0 :(得分:1)
显然我的比赛仍然关闭的原因与隐藏的“贝尔”字符(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
属性中删除诸如铃声字符之类的奇怪字符。