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},}}}”