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 に答える