0

首先祝独立日快乐!对于那些申请!

我正在分析 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: Generate Labels Header

问题来了:

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

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

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

我想要的只是让它更有效率,因为它将被用于数百个图表,而且这些文件中的大多数都非常大。

4

1 回答 1

2

您可以只匹配非|字符并使用环视来确保它是之前的元素Ab Initio...

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

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

re.search(r'[|]([^|]*)[|]Ab Initio Software', name, re.IGNORECASE).group(1)
于 2013-07-04T17:28:09.357 回答