我必须在变量内容或数据文件中搜索模式。下面是我到目前为止的代码:
import re
UserSpecifiedPattern = "segfault"
# find every instance of a user specified pattern
pattern = re.compile( rb'(\.\W+)?([^.]?segfault[^.]*?\.)',
re.DOTALL | re.IGNORECASE | re.MULTILINE )
我的问题是,如何将变量指定为"re.compile“。这意味着,我将实际要搜索的模式存储到一个变量中。然后我将这个变量赋给re.compile。下面是我认为应该有效的方法,但事实并非如此:
import re
UserSpecifiedPattern = "segfault"
# find every instance of a user specified pattern
pattern = re.compile( rb'(\.\W+)?([^.]?UserSpecifiedPattern[^.]*?\.)',
re.DOTALL | re.IGNORECASE | re.MULTILINE )
我猜应该就是这里了吧?
import re
UserSpecifiedPattern = "segfault"
# find every instance of a user specified pattern
pattern = re.compile( rb'(\.\W+)?([^.]?{UserSpecifiedPattern}[^.]*?\.)',
re.DOTALL | re.IGNORECASE | re.MULTILINE )
发布于 2018-06-30 05:55:35
使用bytes
输入搜索正则表达式是可行的,但是您的变量名当然是按字面意思处理的。
你必须注入你的变量,例如在字符串上使用format
,然后编码成字节(bytes
对象没有format
,所以以后再编码它(这里你不能使用b
前缀):
pattern = re.compile(r'(\.\W+)?([^.]?{}[^.]*?\.)'.format(UserSpecifiedPattern).encode(),
re.DOTALL | re.IGNORECASE | re.MULTILINE )
备注:
,
{}
来重复表达式。如果你必须使用它,在你传递的模式上使用两个大括号: ex:{{1,5}}
re.escape
https://stackoverflow.com/questions/51109792
复制相似问题