0

我希望这种模式能够找到恰好在 & 标签之间的任何字母。标签之间的数字数量将是可变的(有时是 5,有时是 5-4,有时是 9)基本上我们总是希望标签之间的数字。有时我的文本文件可能会在标签之间带有字母或空格。

我希望我的脚本做的是计算它在标签之间找到字母 [a-zA-Z) 的次数。如果它找到 0,那么它将报告 0。

我当前的测试文本文件有 2 个邮政编码标签......它们都只有标签之间的数字(这很好)下面的脚本或模式应该显示 0 找到(因为没有字母)但是它报告回来 2。好像它是倒退的。如果我在其中一个标签中放一个字母,下面的这个模式将报告 1。就好像这个模式是倒退的。如果我将其更改为 [^0-9]* 则无论是字母还是数字或两者都找不到。

Set rgxp3 = New Regexp
rgxp3.Pattern = "<ZipCode>([^a-zA-Z]*)</ZipCode>"
rgxp3.IgnoreCase = False
rgxp3.Global = True
Set matches3 = rgxp3.Execute( contents )
4

2 回答 2

0

通常在正则表达式中,分组用于提取语句中的部分([使用方括号()]。

因此,要解决此问题,您将编写一个正则表达式字符串,例如;

<zipcode>([\da-zA-Z]{5}-[\da-zA-Z]{4})</zipcode>

(这个正则表达式字符串查找 5 个字母数字字符,后跟一个连字符 (-),然后是 4 个字母数字字符。(我不是美国人,所以我不清楚邮政编码的可能格式,但你可能会找到正则表达式通过谷歌搜索这部分)。

从我们的表达式中,括号内的部分可以提取为一个组;

[\da-zA-Z]{5}-[\da-zA-Z]{4}

由于我们只有一个分组,这通常称为第 0 组。

所以在你的样本上使用第一个表达式;

<zipcode>12345-1234</zipcode>

并返回第 0 组,会给你;

12345-1234

我对vbscript不熟悉,所以我自己无法回答,但这个答案似乎解释了如何在vbscript中提取子匹配; 正则表达式 - 如何在匹配中找到匹配?

如果您想测试您的正则表达式,您应该使用 RegexPal 等测试工具,它会实时突出显示匹配的内容,以便您可以测试表达式的某些部分以查看哪些内容不起作用。 http://regexpal.com/ 另一个很好的信息来源是正则表达式参考,这个页面包含很多基本正则表达式函数的参考信息。 在此处输入链接描述

于 2013-07-26T14:18:03.680 回答
0

根据您的最后一条评论,您希望找到在标签值中任何位置都有字母的匹配项,例如<zipcode>123c456</zipcode>. 试试这个:

str = "..."

Set re = New RegExp
re.Pattern = "<zipcode>(.*?[a-z].*?)</zipcode>"
re.Global  = True
re.IgnoreCase = True

For Each m In re.Execute(str)
  WScript.Echo m.SubMatches(0)
Next
于 2013-07-26T20:24:26.807 回答