Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将f-string与要在regex中使用的原始字符串相结合会产生SyntaxError;值错误或错误结果_Python_Python 3.x_Regex_Python 3.7_F String - Fatal编程技术网

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

Python 将f-string与要在regex中使用的原始字符串相结合会产生SyntaxError;值错误或错误结果,python,python-3.x,regex,python-3.7,f-string,Python,Python 3.x,Regex,Python 3.7,F String,我这里有一个字符串: 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,它可

我这里有一个字符串:

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
,它可以保存
2
6
之间的任何值。我想根据
cont.
的值将正则表达式从
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
>>> 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
在这种情况下,我得到
ValueError
。现在我也试过这些:

>>> 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
>>> 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\u2
case运行,
is\u head
将被设置为
True
。进一步检查后,我可以看到,
rf”(\s+{cont})和
fr”(\s+{cont})都相当于
(\\s+)(2,)
,这不应该是正确的正则表达式。如何克服这一问题,而不必为
cont\uu
变量的每个可能值显式地使用单独的正则表达式,然后再使用该正则表达式

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

模式将一个或多个空格匹配两次或多次,这没有什么意义。两个或多个空白的块与
\s{2,}
匹配

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

因此,您需要

rf"\s{{{cont_},}}"
如果第一个
{
是一个文本
{
{cont}
代表
cont}
值,最后的
}
是一个文本
}
字符。

(\s+{2,}
没有什么意义,您可能想将两个或更多的空白块与
\s{2,}
匹配。因此,您需要
rf“\s{{{{{{cont},}}}”