Вы можете решить свою проблему без использования регулярных выражений. Регулярные выражения часто являются не самым читаемым решением. Особенно после некоторого времени, когда они не используются или когда выражение представляет собой строку из 50 символов. Синтаксис на чистом языке всегда будет более понятным, и вероятность того, что вы его забудете, будет меньше.
Синтаксическое решение:
Я разделил решение на части, поэтому вы можете изучать его по частям.
query_s = query.rstrip().lstrip()
query_s = query_s.split(sep='\n')
query_s = [ x.split() for x in query_s ]
query_s = [ [x[0], mapping[x[1]]] for x in query_s ]
query_s = [ [ "StructField(\'", x[0], "\',", x[1], ",True)," ] for x in query_s ]
query_s = [ ''.join(x) for x in query_s ]
Решение регулярных выражений:
query_s = query.split(sep='\n')
query_s = [x for x in query_s if x]
query_s = [ ["StructField(\'", re.match(r"^(\w+)\s+(\w+)", x).group(1), "\',", mapping[re.match(r"^(\w+)\s+(\w+)", x).group(2)], ",True)"] for x in query_s ]
out = [''.join(x) for x in query_s]
Вы можете передать вызываемое значение в re.sub
, чтобы сделать его более красивым, вы можете написать хорошую функцию для обработки совпадений и передать ее в re.sub()