Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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 在re.findall()正则表达式函数中使用变量_Python_Regex - Fatal编程技术网

Python 在re.findall()正则表达式函数中使用变量

Python 在re.findall()正则表达式函数中使用变量,python,regex,Python,Regex,我有一个正则表达式模式列表,比如k[a-z]p[a-z]+a 以及一系列符合这些模式的单词。现在问题是,, 当我使用: re.findall(r'k[a-z]p[a-z]+a', list) 一切正常,但当我用如下变量替换原始表达式时: pattern = "r'" + pattern + "'" 然后尝试: re.findall(pattern, list) 或 它不再起作用了。我怎样才能修好它 谢谢! 斯派克你想得太多了。r前缀不是模式字符串本身的一部分,它仅表示以下字符串不应对某些字

我有一个正则表达式模式列表,比如k[a-z]p[a-z]+a 以及一系列符合这些模式的单词。现在问题是,, 当我使用:

re.findall(r'k[a-z]p[a-z]+a', list)
一切正常,但当我用如下变量替换原始表达式时:

pattern = "r'" + pattern + "'"
然后尝试:

re.findall(pattern, list)

它不再起作用了。我怎样才能修好它

谢谢!
斯派克

你想得太多了。
r
前缀不是模式字符串本身的一部分,它仅表示以下字符串不应对某些字符使用转义码

这将在不调整模式的情况下工作:

re.findall(pattern, list)
如果您的
模式
包含不需要转义的字符(因为它们不需要转义),则可以将前缀
r
添加到模式定义中。假设您想搜索不同的正则表达式,然后使用

pattern = r'k\wp\wa'
re.findall(pattern, list)
你不需要逃避它。由于
pattern
本身是一个非常普通的字符串,因此可以将其与其他字符串连接起来:

start = 'a'
middle = 'b'
end = 'c'
pattern = a + r'\w' + b + r'\w' + c
re.findall(pattern, list)

你是否打算将你的单词与模式
r'k[a-z]p[a-z]+a'
匹配?你到底想完成什么?这个问题在预期的解决方案中相当模糊嗨,欢迎来到!当您有时间时,请注意和。
pattern=re.escape(pattern)
start = 'a'
middle = 'b'
end = 'c'
pattern = a + r'\w' + b + r'\w' + c
re.findall(pattern, list)