这可能吗?可能不是?然后我怎样才能找到匹配的所有确切匹配项和相应的页码?
编辑:
我让正则表达式正常工作。我需要的是每场比赛都能获得它出现的所有页面。
示例:
regex = \b\d{3}\b
123 appears on page 1,4,20
243 appear on page 3,5,7
523 appears on page 9
我如何获取该信息(匹配发生在所有页面上?)
这是为了自动创建某种索引。
编辑2:
我有一个基本的工作版本,代码段:
Set Matches = regExp.Execute(ActiveDocument.range.Text)
For Each Match In Matches
Set range = ActiveDocument.range(Match.FirstIndex, Match.FirstIndex + Len(Match.Value))
page = range.Information(wdActiveEndAdjustedPageNumber)
问题是Match.FirstIndex并不总是指向ActiveDocument.range中匹配的第一个字符。由于ActiveDocument.range.Text中包含的字符不在表格中表示的内容,因此Word表格会搞乱这一点。
答案 0 :(得分:3)
我认为这可能更适合SuperUser。
问题的答案是“是的。”
Selection.Information(wdActiveEndAdjustedPageNumber)
VBA中的上述属性将为您提供选择的页码。
答案 1 :(得分:3)
这结果相当复杂,我不能说我的解决方案是否适用于任何文件。主要问题如问题中所示,RegexMatch.FirstIndex不能用于确定实际匹配是否在MS Word文档中。这是因为正则表达式匹配是在range.Text属性(String)上完成的,并且该字符串只包含与范围对象不同的字符数量,因此索引不匹配。
所以我的解决方案是针对每场比赛,我在整个文档中查找该比赛。 find方法给出一个Range对象,从中可以确定正确的页面。
在我的特殊情况下,匹配可能是同样的东西也有不同的价值。示例:343
在我的情况下与Prefix-343
相同。第二个问题是匹配必须在123
之前进行排序,而不管在文档中首先出现哪一个。{/ p>
如果您需要排序功能,您还需要以下#34;模块":
SortDictionary功能:
http://www.cpearson.com/excel/CollectionsAndDictionaries.htm
模块" modQSortInPlace":
http://www.cpearson.com/Zips/modQSortInPlace.zip
如果不需要排序,则您不需要它们,但您需要从我的代码中删除相应的函数调用324
。
现在我的代码。您可以移除的Soem部分,尤其是格式化部分。这是我的具体情况。此外,如果您的比赛是"唯一的",例如。不是前缀,所以你也可以简化代码。您需要参考" Microsoft Scripting Library"。
SortDictionary Dict, True