我有以下两个在sql查询中解析表达式的用例: [some_date:week]
应该导致 week
. week
以下是一些预先知道的关键字之一。 [some_expression|condition]
应该导致 1
或者其他无关的角色,在这里都无关紧要。
我首先想到了以下正则表达式:
r"\[(.*)\:(sec|min|hour|day|date|week|month|year|aggregate)\]"
但是,当这种表达式多次出现时,它不能正常工作。
然后我只找到了一种方法来限制括号内表达式的长度,使用 {,30}
因此,对于第二个用例,它变成:
r"\[.{,30}\|.{,30}\]"
我不认为这是一个最佳的方式来做它,并期待您的建议!
编辑:这里有一些例子说明它现在是如何工作的,以及它应该如何工作。
txt = """select [first:week] as time,
[next:month] as date
from table"""
exp = r"\[(.*)\:(sec|min|hour|day|date|week|month|year|aggregate)\]"
print(re.sub(exp, r"\1", txt, flags = re.S|re.I))
>> select first:week] as time,
[next as date
from table
应该是:
select first as time,
next as date
from table
1条答案
按热度按时间ljo96ir51#
你可以用
查看regex演示。
重点是使用
[^][:]*
-任何零个或多个字符,除了]
,[
以及:
-而不是.*
.请注意
.*?
在这里也不起作用:如果两个匹配的子字符串之间存在不匹配的子字符串,则第一个匹配将比预期的长。