从正则表达式转到单词vba(.Find)

时间:2013-12-03 14:15:01

标签: regex vba word-vba

我有这个正则表达式

<#([^\s]+).*?>\s?<a href=""(.*?)"".*?>(.*?)</a>(\s?\((Pending|Prepared)\))?

我真的需要它在vba版本中的单词.find方法(不需要匹配组),这是我到目前为止

\<\#*\>*\<a href=*\>*\<\/a\>

但我不能让最后一部分工作,我在这里谈论

(\s?\((Pending|Prepared)\))?

我真的希望有人可以帮助我,因为在这种情况下正则表达式不是一个选项(虽然我知道我可以在VBA中使用正则表达式!)

干杯

1 个答案:

答案 0 :(得分:0)

我没有在文档(Wildcard character reference)或示例(Putting regular expressions to work in Word)中看到OR |,因此我建议将其拆分为两个单独的搜索。如果您需要更多信息,Word MVP网站在Word Regex上也有good reference

[^\s]可以在Word样式正则表达式中写为[! ](注意空格),+变为@。 VBA的{n,}{n,m}语法似乎都不支持n值为0,这使得?*很难在Word中实现。 MS人员似乎使用的一个选项是*,在Word中是“任意字符串”。根据我的测试,*是懒惰的,这意味着针对字符串\<#*\>运行的模式<#sometag> asdfsadfasdf >只会匹配<#sometag>。此外,它可以匹配0个字符,例如\<\#*\>将匹配<#>

假设第一部分按预期工作,您可以尝试以下两个正则表达式:

\<\#*\>*\<a href=*\>*\<\/a\>*\(Pending\)

\<\#*\>*\<a href=*\>*\<\/a\>*\(Prepared\)

这里遇到的麻烦是*会匹配到Pending或Prepared的P,所以中间可能会有其他文本,但这是我看到匹配可选空间的唯一方法。如果你能够保证这个空间将会或者不会存在,那么这将使正则表达式更加安全。

尝试一下,看看它是否适合你!