正規表現のリストとターゲット フレーズのリストがあります。正規表現の各部分を各フレーズと照合し、リストのリストを返します。行は用語、列は正規表現であり、データは一致オブジェクトまたはのいずれかであり、None
可能な限り簡潔です。私の現在のアプローチはこのマッチングを行いますが、残念ながら、私が説明したリストのリストではなく、単一の長いリストが得られます。
ここに私が持っているものがあります:
import re
regexLines=['[^/]*/b/[^/]*', 'a/[^/]*/[^/]*', '[^/]*/[^/]*/c', 'foo/bar/baz', 'w/x/[^/]*/[^/]*', '[^/]*/x/y/z']
targetLines=['/w/x/y/z/', 'a/b/c', 'foo/', 'foo/bar/', 'foo/bar/baz/']
###compiling the regex lines
matchLines=[re.compile(i) for i in regexLines]
matchMatrix=[i.match(j) for i in matchLines for j in targetLines]
matchMatrix
[None, <_sre.SRE_Match object at 0x04095368>, None, None, None, None, <_sre.SRE_Match object at 0x0411A3D8>, None, None, None, None, <_sre.SRE_Match object at 0x0411A410>, None, None, None, None, None, None, None, <_sre.SRE_Match object at 0x0411A448>, None, None, None, None, None, None, None, None, None, None]
代わりに、各行がフレーズの一致を表す、次のようなものが必要です。
[[None, <_sre.SRE_Match object at 0x04095368>, None, None, None, None],
[<_sre.SRE_Match object at 0x0411A3D8>, None, None, None, None, <_sre.SRE_Match object at 0x0411A410>], etc. etc.
やりたいことを実行できる冗長なループを書き出すこともできますが、これを行うための簡潔で Pythonic な方法があると思います。