我使用正则表达式来搜索以下属性返回的纯文本:
namespace Microsoft.Office.Interop.Word
{
public class Range
{
...
public string Text { get; set; }
...
}
}
根据匹配,我想更改与纯文本相对应的格式化文本。我遇到的问题是 .Text
属性中的字符索引与 .Start
和 .End
属性不匹配范围
对象。有谁知道有什么方法可以匹配这些索引吗?
(我无法使用 Word 通配符查找功能(作为 .NET 正则表达式的替代品),因为它们对于我正在搜索的模式(非贪婪运算符等)来说不够强大)
我可以通过从 Document.Range().Collapse(WdCollapseStart)
开始,然后 range.MoveStart(WdUnitChar, match.Index)
来移动正确数量的字符因为按字符移动会将格式化文本位置与纯文本中的匹配项进行匹配。
我现在的问题是,我总是在格式化文本中出现 4 个字符太远的情况……所以也许这与其他故事范围有关?我不确定...
最佳答案
显然我的比赛仍然失败的原因与隐藏的“Bell”字符有关(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
属性中删除奇怪的字符,例如响铃字符。
关于vba - 将 Range.Text 关联到 Range.Start 和 Range.End,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3772938/