gpt4 book ai didi

python - 匹配 python 正则表达式中的嵌入换行符

转载 作者:行者123 更新时间:2023-12-01 05:43:23 28 4
gpt4 key购买 nike

有什么方法可以处理这个问题吗?我尝试过字符串、原始字符串和 (?is)、re.DOTALL 的各种排列,但均不成功。

以下是我尝试过的示例:

>>> x="select a.b from a join b \nwhere a.id is not null"
>>> print (x)
select a.b from a join b
where a.id is not null
>>> y=re.match("(?is)select (.*) from (.*) where (?P<where>.*)",x,re.DOTALL)
>>> y.groupdict()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'groupdict'

注意也尝试过:

    >>> x=r"""select a.b from a join b
where a.id is not null""""

相同(结果不正确)

我也尝试过使用/不使用 (?is) 和 re.DOTALL。

注意:如果从测试的字符串中删除嵌入的换行符,则匹配效果完美:

>>> nonewline="select a.b from a join b where a.id is not null"
>>> y=re.match("(?is)select (.*) from (.*) where (?P<where>.*)",nonewline,re.DOTALL|re.MULTILINE)
>>> y.groupdict()
{'where': 'a.id is not null'}

最佳答案

我认为问题在于你实际上在 where 之前有一个换行符语句,而不是空格。

您的文字:

"select a.b from a join b \nwhere a.id is not null"

--------------------------------------------------------^

您的正则表达式:

(?is)select (.*) from (.*) where (?P<where>.*)

--------------------------------------------------------^

尝试这样的事情:

from re import *

x = "select a.b from a join b \nwhere a.id is not null"
y = match("select\s+(.*?)\s+from\s+(.*?)\s+where\s+(?P<where>.*)",
x, DOTALL)
print(y.groups())
print(y.groupdict())

输出:

('a.b', 'a join b', 'a.id is not null')
{'where': 'a.id is not null'}

关于python - 匹配 python 正则表达式中的嵌入换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16878282/

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