gpt4 book ai didi

python - 将 f-string 与要在 regex 中使用的原始字符串组合会产生 SyntaxError; ValueError 或错误的结果

转载 作者:行者123 更新时间:2023-12-04 09:41:56 24 4
gpt4 key购买 nike

我这里有一个字符串:

s0 = 'Ready1   Origin1                 Destination1             Type1       Rate1      Phone1 #     Pro1 #'

下面的变量是这样计算的:

is_head = len([i.group() for i in re.finditer(r"(\s+){2,}", s0)]) >= 3

这给了我 True 这对我来说是正确的和预期的结果。现在我有了另一个变量 cont_,它可以保存 26 之间的任何值。我想根据 的值将正则表达式从 r"(\s+){2,}" 更改为 r"(\s+){6,}" >继续_。我想获取变量 is_head 而无需为每种情况声明单独的正则表达式。为此,我需要将 f-string 与当前用于正则表达式检查的原始字符串一起使用。我试过这些:

>>> len([i.group() for i in re.finditer(fr"(\s+){{cont_},}", s0)]) >= 3
File "<stdin>", line 1
SyntaxError: f-string: single '}' is not allowed
>>> len([i.group() for i in re.finditer(rf"(\s+){{cont_},}", s0)]) >= 3
File "<stdin>", line 1
SyntaxError: f-string: single '}' is not allowed

如图所示,两者都给出了SyntaxError。我还使用 .format() 尝试了以下操作:

>>> len([i.group() for i in re.finditer(r"(\s+){{con},}".format(cont_), s0)]) >= 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Single '}' encountered in format string
>>> len([i.group() for i in re.finditer(r"(\s+){{0},}".format(cont_), s0)]) >= 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Single '}' encountered in format string

在这种情况下,我会得到 ValueError。现在我也尝试了这些:

>>> len([i.group() for i in re.finditer(fr"(\s+){cont_,}", s0)]) >= 3
False
>>> len([i.group() for i in re.finditer(rf"(\s+){cont_,}", s0)]) >= 3
False

这些不会产生任何错误,但在每种情况下都会给出错误的结果。如果我使用 cont_ = 2 案例运行,is_head 将被设置为 True。经过进一步检查,我可以看到 rf"(\s+){cont_,}" 以及 fr"(\s+){cont_,}" - 两者都是相当于 '(\\s+)(2,)' 不应该是正确的正则表达式。如何在不为 cont_ 变量的每个可能值显式设置单独的正则表达式并随后使用该正则表达式的情况下克服这个问题。

注意:请注意,我知道在 here 之前有人问过类似的问题.但是那里的解决方案对我的事业没有帮助。

最佳答案

(\s+){2,} 模式匹配一个或多个 空格两次或更多次,这毫无意义。两个或多个空格的 block 与 \s{2,} 匹配。

接下来,在 f 字符串或格式字符串中,文字花括号必须加倍。

因此,你需要

rf"\s{{{cont_},}}"

其中第一个 {{ 是文字 {{cont_} 代表 cont_ 值和末尾的 }} 是文字 } 字符。

关于python - 将 f-string 与要在 regex 中使用的原始字符串组合会产生 SyntaxError; ValueError 或错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62292836/

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