首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中编译搜索模式

在Python中编译搜索模式
EN

Stack Overflow用户
提问于 2018-06-30 05:45:52
回答 1查看 55关注 0票数 1

我必须在变量内容或数据文件中搜索模式。下面是我到目前为止的代码:

代码语言:javascript
复制
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。下面是我认为应该有效的方法,但事实并非如此:

代码语言:javascript
复制
import re

UserSpecifiedPattern = "segfault"

# find every instance of a user specified pattern
pattern =  re.compile( rb'(\.\W+)?([^.]?UserSpecifiedPattern[^.]*?\.)',
                       re.DOTALL | re.IGNORECASE | re.MULTILINE )

我猜应该就是这里了吧?

代码语言:javascript
复制
import re

UserSpecifiedPattern = "segfault"

# find every instance of a user specified pattern
pattern =  re.compile( rb'(\.\W+)?([^.]?{UserSpecifiedPattern}[^.]*?\.)',
                       re.DOTALL | re.IGNORECASE | re.MULTILINE )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-30 05:55:35

使用bytes输入搜索正则表达式是可行的,但是您的变量名当然是按字面意思处理的。

你必须注入你的变量,例如在字符串上使用format,然后编码成字节(bytes对象没有format,所以以后再编码它(这里你不能使用b前缀):

代码语言:javascript
复制
pattern =  re.compile(r'(\.\W+)?([^.]?{}[^.]*?\.)'.format(UserSpecifiedPattern).encode(),
                   re.DOTALL | re.IGNORECASE | re.MULTILINE )

备注:

  • ,它适用于这个特殊的模式,它不使用{}来重复表达式。如果你必须使用它,在你传递的模式上使用两个大括号: ex:{{1,5}}
  • depending,如果你想让正则表达式从字面上看到它(与单词无关),你可能需要在它上面使用re.escape
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51109792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档