提取与前一个文本正则表达式匹配的一个数值

时间:2018-02-23 10:26:01

标签: regex

我正在尝试匹配一个固定关键字前面的特定数值(可以是1到7位数字),但是我想要忽略之间可能存在一些字符(以及前面的关键字)

该字符串是已解析的电子邮件标题,可能如下所示:

To: tesrecipient <test@test.com>
Subject: RE: Re:(ejTag: 24) Testemail
Thread-Topic: Re:(ejTag: 24) Testemail
Thread-Index: AQHTrH7+kcQ/Afcr+ECnKm9qEjGKtKOxpzfg
Date: Fri, 23 Feb 2018 09:27:15 +0100
Message-ID: <c64332ea7c9d4fa8882748fdf152bc7e@test.com>
References: <9f8eb2fd5031498eb29443ca9ba20b91@test.com>
<!251534C4C-20-V2@domain.test.com>
In-Reply-To: <!251534C4C-20-V2@domain.test.com>
Accept-Language: nb-NO, en-US

我想要的是字符串ejTag部分Thread-Topic之后的数值,在本例中为24。 我的当前正则表达式仅在ejTag之前ejTagThread-Topic之间没有任何内容时匹配。

(?<=Thread-Topic: \(ejTag:)(.*[0-9])

我想忽略re:Thread-Topic之间电子邮件主题可能包含的ejTag字符,而只捕获ejTag:之后的数字值。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你可以尝试

(?<=Thread-Topic: Re:\(ejTag: )([0-9]{1,7})

Demo

我添加了Re:和有限数量的重复。

修改

对于可选的Re:,你需要有两个带有替代的子模式((Re:)?将不起作用,因为lookbehind需要具有恒定的宽度)。

(?<=Thread-Topic: Re:\(ejTag: )([0-9]{1,7})|(?<=Thread-Topic: \(ejTag: )([0-9]{1,7})

Updated demo