正则表达式基于正则表达式的特定组的分组和提取看后面

时间:2018-02-08 13:11:20

标签: python regex python-2.7 regex-negation regex-lookarounds

我想在ID' ID'之后提取数字。发生在下面的文字中 这就是我能够得到它的方式。

import re

txt="Recharge done on 28-12-2017 04:57PM,MRP:Rs9.00,GST 18% payable by Company/Distributor/Retailer:Rs1.37, ID 147894886."

# 'ID' need to be present as mandatory group
regex = '(id)(.*?)(\d+})' 

rg = re.compile(regex ,re.IGNORECASE|re.DOTALL)
m = rg.search(txt)
if m:
    print m.group(3)

当我运行以下代码时,它会打印

147894886

问题出现了

如果txt变得像这样

txt="Recharge done on 28-12-2017 04:57PM,MRP:Rs9.00,GST 18% payable by Company/Distributor/Retailer:Rs1.37, TransID 147894886."

和" Trans"单词出现在" ID"然后我不想提取数字。如何在正则表达式中执行此操作(即,如果" TransID"在数字之前存在,则不提取数字,但仅当" ID"存在然后提取数字时)

2 个答案:

答案 0 :(得分:2)

您可以使用负面的后视[doc]:

(?<!trans)(id)(.*?)(\d+)

Demo

或者,正如Sebastian Proske建议的那样,你可以使用单词边界:

\b(id)(.*?)(\d+)

Demo

答案 1 :(得分:0)

您可以使用字边界(\b)来确保ID是一个完整的单词。

\b(id)(.*?)(\d+)

它可能也有助于更少地匹配您的模式。如果您总是ID后跟一个空格,后跟9个数字,则可以使用此正则表达式:

\b(id)([ ])(\d{9})

Pythex Demo