我正在尝试匹配一个固定关键字前面的特定数值(可以是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
之前ejTag
和Thread-Topic
之间没有任何内容时匹配。
(?<=Thread-Topic: \(ejTag:)(.*[0-9])
我想忽略re:
和Thread-Topic
之间电子邮件主题可能包含的ejTag
字符,而只捕获ejTag:
之后的数字值。
有什么想法吗?
答案 0 :(得分:2)
你可以尝试
(?<=Thread-Topic: Re:\(ejTag: )([0-9]{1,7})
我添加了Re:
和有限数量的重复。
修改
对于可选的Re:
,你需要有两个带有替代的子模式((Re:)?
将不起作用,因为lookbehind需要具有恒定的宽度)。
(?<=Thread-Topic: Re:\(ejTag: )([0-9]{1,7})|(?<=Thread-Topic: \(ejTag: )([0-9]{1,7})