如果类似的问题已经得到回答,我深表歉意。但这就是我正在努力解决的问题,用一个正则表达式来替换。
我的输入文本具有以下示例
" var1 || literal "
我需要一个正则表达式来做类似这样的事情
" concat var1 , literal "
本质上,||应替换为逗号,并且第一个元素应以"concat“为前缀。我可能在一个给定的输入中出现多次这样的情况,所以我应该在任何地方替换。
这就是我被卡住的地方。我可以构建正则表达式模式,但我不确定如何替换它和替换它。
re.sub(r'\s{1}[a-zA-Z0-9_]+\s*\|\|\s*[a-zA-Z0-9_]+\s*, '??????', input_string)
我不确定这是否可以在一条Python语句中完成。
我有一种替代方法,可以遍历循环中的字符串,获取每次出现的内容,并在不使用正则表达式的情况下单独替换它。
提前谢谢。罗达
发布于 2020-07-07 10:55:54
对于python re模块,您可以将其替换为正则表达式,方法是将术语放在模式的括号中,然后按照术语的顺序使用\1、\2等进行替换。
re.sub(r'\s{1}([a-zA-Z0-9_]+)\s*\|\|\s*([a-zA-Z0-9_]+)\s*', r'concat \1 , \2', input_string)发布于 2020-07-07 10:57:54
您可以使用带有回调函数的re.sub来处理此要求:
sql = "select var1 || literal || var2 from yourTable"
def to_concat(matchobj):
return "concat(" + re.sub(r'\s*\|\|', ',', matchobj) + ")"
sql_out = re.sub(r'\S+(?:\s+\|\|\s+\S+)+', lambda x: to_concat(x.group()), sql)
print(sql + "\n" + sql_out)这将打印:
select var1 || literal || var2 from yourTable
select concat(var1, literal, var2) from yourTable这里的想法是首先匹配涉及ANSI ||连接运算符的整个表达式。然后,我们将其传递给一个回调函数,该函数随后有选择地将所有||替换为逗号,并形成对concat的函数调用。
https://stackoverflow.com/questions/62767421
复制相似问题