Python中要替换的正则表达式模式

Python中要替换的正则表达式模式,python,regex,Python,Regex,如果已经回答了类似的问题,则表示歉意。但这就是我正在努力解决的问题,用正则表达式替换它 我的输入文本有以下示例 “var1 | | literal” 我需要这样一个正则表达式子类 “concat var1,literal” 基本上,| |应替换为逗号,第一个元素的前缀应为“concat”。我可能在一个给定的输入中有多个这样的事件,所以我应该到处替换 这就是我被困的地方。我可以构建regex模式,但我不确定如何替换它和它 re.sub(r'\s{1}[a-zA-Z0-9\]+\s*\\\\\\\\

如果已经回答了类似的问题,则表示歉意。但这就是我正在努力解决的问题,用正则表达式替换它

我的输入文本有以下示例

“var1 | | literal”

我需要这样一个正则表达式子类

“concat var1,literal”

基本上,| |应替换为逗号,第一个元素的前缀应为“concat”。我可能在一个给定的输入中有多个这样的事件,所以我应该到处替换

这就是我被困的地方。我可以构建regex模式,但我不确定如何替换它和它

re.sub(r'\s{1}[a-zA-Z0-9\]+\s*\\\\\\\\\\\\\\\\\s*[a-zA-Z0-9\]+\s*,'???????',输入字符串)

我不确定这是否可以在一条Python语句中完成

我有一个替代方法,可以在循环中遍历字符串,获取每个实例,并单独替换它,而不使用正则表达式

提前谢谢。
Radha

使用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)

您可以使用带有回调函数的
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

的函数调用,谢谢。这是有效的,但它只对第一次发生有效,我在多行中有多次发生。我使用了re.MULTILINE标志,虽然没有多大帮助。请忽略它,它起作用了,我在代码中犯了一个错误。谢谢你的帮助。