首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >要在Python中替换的正则表达式模式

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

Stack Overflow用户
提问于 2020-07-07 10:51:38
回答 2查看 47关注 0票数 1

如果类似的问题已经得到回答,我深表歉意。但这就是我正在努力解决的问题,用一个正则表达式来替换。

我的输入文本具有以下示例

" 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语句中完成。

我有一种替代方法,可以遍历循环中的字符串,获取每次出现的内容,并在不使用正则表达式的情况下单独替换它。

提前谢谢。罗达

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-07 10:55:54

对于python re模块,您可以将其替换为正则表达式,方法是将术语放在模式的括号中,然后按照术语的顺序使用\1、\2等进行替换。

代码语言:javascript
复制
re.sub(r'\s{1}([a-zA-Z0-9_]+)\s*\|\|\s*([a-zA-Z0-9_]+)\s*', r'concat \1 , \2', input_string)
票数 0
EN

Stack Overflow用户

发布于 2020-07-07 10:57:54

您可以使用带有回调函数的re.sub来处理此要求:

代码语言:javascript
复制
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)

这将打印:

代码语言:javascript
复制
select var1 || literal || var2 from yourTable
select concat(var1, literal, var2) from yourTable

这里的想法是首先匹配涉及ANSI ||连接运算符的整个表达式。然后,我们将其传递给一个回调函数,该函数随后有选择地将所有||替换为逗号,并形成对concat的函数调用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62767421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档