有谁提供更好的解决方案?从右到左正则表达式。使用python

时间:2013-07-04 17:21:33

标签: python regex ab-initio

首先是独立日快乐!适用于那些人!

我在分析Ab Initio图表,为此,我需要获取组件的名称,开发人员用来描述它的功能,我可以从以下行中提取。

name ='}}@0|@207000|80000|227000|100000|152000|126000|11654|RFMT: Generate Labels Header|Ab Initio Software|Built-in|1|100|0||6||32769|1|{1|0|}}}'

我尝试使用正则表达式来提取组件的名称: RFMT:生成标签标题

出现了问题:

我的分隔符是 | Ab Initio Software ,这意味着,我需要从右到左使用正则表达式。 有没有办法用Python来完成它。

我提出的最有效的解决方案是扭转一切。

name = line[::-1]
name = re.search('erawtfoS oitinI bA\|(.*?)\|', name, re.IGNORECASE).group(1)
name = name[::-1]

我想要的只是提高它的效率,因为它将用于数百个图形,而且大多数文件都非常大。

1 个答案:

答案 0 :(得分:2)

您可以匹配非|字符,并使用lookarounds确保它是Ab Initio...之前的元素:

re.search(r'(?<=[|])[^|]*(?=[|]Ab Initio Software)', name, re.IGNORECASE).group()

即使没有前瞻,如果您只是将(.*?)更改为更明确的[^|]*,您也会获得正确的结果。但贪婪的先行解决方案可能更有效率。无论如何,这是:

re.search(r'[|]([^|]*)[|]Ab Initio Software', name, re.IGNORECASE).group(1)
相关问题