正则表达式在模糊标记之后匹配字符串

时间:2013-06-13 21:50:38

标签: regex word-vba outlook-vba

我试图在Outlook中收到的电子邮件中匹配护照号码。基本上,标记可以是以下任何格式:

通过 1234567

通过, 11223344

通过: 1234567

Passport# HA12345678

Passport#: G7654321

护照: 1234567 (尼泊尔)

护照号码 123456789

护照号码: 123456789

护照号码: TG1234567

护照号码 1234567

护照号码 - 5432198765

护照号码, AH123456789

护照号码: AB123456

护照/旅行证件号码: AZ0912345

我只对抓取粗体部分感兴趣,但它必须非常靠近Pass *标签,因为电子邮件中还有其他数字可能被误解为护照号码。

我在Windows 7下使用VBA(Word& Outlook)Office 2010下的VBScript正则表达式5.5。我相信这种正则表达式与JavaScript中使用的最相关吗?

2 个答案:

答案 0 :(得分:1)

描述

此正则表达式将匹配以2个字母数字字符开头的字符串,并继续使用5到10个字母数字字符。我允许这么多字符,因为示例文本有一系列所需的字符串大小。

\b[a-zA-Z0-9]{2}[0-9]{5,10}\b

enter image description here

输入文字

您的14行输入样本文本

Pass 1234567
Pass, 11223344
Pass: 1234567
Passport # is HA12345678.
Passport #: G7654321
Passport: 1234567 (Nepal)
Passport No 123456789
Passport No.: 123456789
Passport No: TG1234567
Passport Number 1234567
Passport Number - 5432198765
passport number, AH123456789
Passport Number: AB123456
Passport/Travel Document Number: AZ0912345

匹配

[0] => 1234567
[1] => 11223344
[2] => 1234567
[3] => HA12345678
[4] => G7654321
[5] => 1234567
[6] => 123456789
[7] => 123456789
[8] => TG1234567
[9] => 1234567
[10] => 5432198765
[11] => AH123456789
[12] => AB123456
[13] => AZ0912345

答案 1 :(得分:0)

^(?:[A-Z 0-9]{2})[0-9]{5,10}$

哪里:

  • ^ 表示字符串的开始。
  • ( 代表组的开始。
    • ? 代表 0 或 1 次。
    • [A-Z 0-9]{2} 表示接下来的两个字母/数字应该是 A-Z/0-9 之间的任何一个。
  • ) 代表组的结束。
  • [0-9]{5,10} 表示接下来的数字应该是 0-9 和最小 5 和最大 10 之间的任何数字
  • $ 表示字符串的结尾。