<p>我有一个解决方案,但代码有点多。这没有使用<code>regex</code>,只是对关键字进行多次拆分。在</p>
<pre><code>s = """
SUM(case when(A.money-B.money>1000
and A.unixtime-B.unixtime<=890769
and B.col10 = "A"
and B.col11 = "12"
and B.col12 = "V") then 10
end) as finalCond0,
MAX(case when(A.money-B.money<0
and A.unixtime-B.unixtime<=6786000
and B.cond1 = "A"
and B.cond2 = "4321"
and B.cond3 in ("E", "F", "G")) then A.col10
end) as finalCond1,
SUM(case when(A.money-B.money>0
and A.unixtime-B.unixtime<=6786000
and B.cond1 = "A"
and B.cond2 = "1234"
and B.cond3 in ("A", "B", "C")) then 2
end) as finalCond2
"""
# remove newlines and doble spaces
s = s.replace('\n', ' ')
while ' ' in s:
s = s.replace(' ', ' ')
s = s.strip()
# split on keywords, starting with the original string
current_parts = [s, ]
for kw in ['SUM', 'MAX', 'MIN']:
new_parts = []
for part in current_parts:
for i, new_part in enumerate(part.split(kw)):
if i > 0:
# add keyword to the start of this substring
new_part = '{}{}'.format(kw, new_part)
new_part = new_part.strip()
if len(new_part) > 0:
new_parts.append(new_part.strip())
current_parts = new_parts
print()
print('current_parts:')
for s in current_parts:
print(s)
</code></pre>
<p>我得到的输出是:</p>
^{pr2}$
<p>对你有用吗?它似乎适用于你在问题中输入的示例字符串。在</p>