首先,独立日快乐!对于那些申请者!
我正在分析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|}}}'
我尝试使用regex来提取组件的名称,即: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]
我只想让它更高效,因为它将用于数百张图,其中大多数文件都很大。
您可以只匹配非|
字符,并使用查找来确保它是Ab Initio...
:之前的元素
re.search(r'(?<=[|])[^|]*(?=[|]Ab Initio Software)', name, re.IGNORECASE).group()
即使没有前瞻性,如果只将(.*?)
更改为更明确的[^|]*
,也会得到正确的结果。但贪婪的前瞻性解决方案可能更有效。不管怎样,它在这里:
re.search(r'[|]([^|]*)[|]Ab Initio Software', name, re.IGNORECASE).group(1)