我有这个正则表达式
<#([^\s]+).*?>\s?<a href=""(.*?)"".*?>(.*?)</a>(\s?\((Pending|Prepared)\))?
我真的需要它在vba版本中的单词.find方法(不需要匹配组),这是我到目前为止
\<\#*\>*\<a href=*\>*\<\/a\>
但我不能让最后一部分工作,我在这里谈论
(\s?\((Pending|Prepared)\))?
我真的希望有人可以帮助我,因为在这种情况下正则表达式不是一个选项(虽然我知道我可以在VBA中使用正则表达式!)
干杯
答案 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,所以中间可能会有其他文本,但这是我看到匹配可选空间的唯一方法。如果你能够保证这个空间将会或者不会存在,那么这将使正则表达式更加安全。
尝试一下,看看它是否适合你!