gpt4 book ai didi

python - 正则表达式:如何在不混合输出的情况下分离已解析的元素

转载 作者:行者123 更新时间:2023-12-04 04:03:02 25 4
gpt4 key购买 nike

我有以下两个在 SQL 查询中解析表达式的用例:

  1. [some_date:week] 的结果应该是 weekweek 这里是几个提前知道的关键字之一。
  2. [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

最佳答案

你可以使用

r"\[([^][:]*):(sec|min|hour|day|date|week|month|year|aggregate)]"

参见 regex demo .

重点是使用[^][:]* - 除 ] 以外的任何零个或多个字符, [: - 而不是 .* .

请注意 .*?在这里也不起作用:如果两个匹配的子串之间存在不匹配的子串,则第一个匹配 will be longer超出预期。

关于python - 正则表达式:如何在不混合输出的情况下分离已解析的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62794442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com