我第一次尝试使用正则表达式并遇到麻烦,可能是我的语法。
以下是我想找到的源文件中包含的示例字符串:
Type = Creature / Animal / Elephant
“Type =”是静态的,但正斜杠之间的三个值可以改变。
我正在使用的搜索字符串是:
\bType = .*/.*/.*\b
我的搜索字符串工作正常,但我的源文件是HTML,一些字符串嵌入了HTML代码:
Type = Creature / Animal / Elephant
Type = Creature / Animal / Elephant<br />
Type = Creature / Animal / Elephant</span></span></strong>
这样的东西(它不是很好的HTML,也许是从Microsoft Word复制粘贴?)
对于我的搜索表达式,这是结果之一:
Type = Creature / Many Fish / Tuna </span></span></li
我不明白为什么结果不止于“&amp;”或“&lt;”金枪鱼之后。
有关如何更改表达式以处理这些变体的任何想法?
我正在使用Microsoft VBScript Regular Expressions 5.5库在Microsoft Excel中使用VBA。谢谢。
答案 0 :(得分:1)
你的正则表达式:
.*/.*/.*\b
消耗太多,因为.*
贪婪地捕获。你可以不情愿地匹配它们,但是你想要的逻辑在做这项工作方面有点不清楚。因此,相反,这将更准确地指定应匹配的内容。
[^/]*/[^/]*/ \w+
而不是.*
,使用[^/]*
表示除了“/”之外的其他内容,因此它会阻止贪图消耗过斜线,特别是当有斜杠时,就像在几个示例中一样。 \w+
是一个空格,后跟一个或多个单词字符(字母,数字,下划线)。它不会消耗空格或&
,但听起来就是意图。
但实际上,我怀疑更好的解决方案是not use regex for this at all。