向Python正则表达式引擎添加特殊字符
我有一个搜索字节码指令的项目,我想扩展它,允许使用正则表达式匹配模式 我想做的要点是拥有自定义字符类/集,这样我就可以让诸如向Python正则表达式引擎添加特殊字符,python,Python,我有一个搜索字节码指令的项目,我想扩展它,允许使用正则表达式匹配模式 我想做的要点是拥有自定义字符类/集,这样我就可以让诸如ISTORE之类的内容与以下任何指令匹配: ISTOREISTORE\u 0ISTORE\u 1ISTORE\u 2ISTORE\u 3 然后是类似的ILOADILOAD\n等 ISTORE和ILOAD类似于元字符,如\s,它们真正代表多个字符 基本上,我只是在寻找一个起点,这样我就可以找到一种方法来实现我自己的元字符。您不需要修改正则表达式引擎(这将非常困难) 您只需要一
ISTORE
之类的内容与以下任何指令匹配:
ISTORE
ISTORE\u 0
ISTORE\u 1
ISTORE\u 2
ISTORE\u 3
然后是类似的ILOAD
<代码>ILOAD\n等
ISTORE和ILOAD类似于元字符,如\s
,它们真正代表多个字符
基本上,我只是在寻找一个起点,这样我就可以找到一种方法来实现我自己的元字符。您不需要修改正则表达式引擎(这将非常困难) 您只需要一个helper函数来将您的regex风格转换为python风格,方法与使用
re.escape
def my_re_escape(regex):
regex = re.escape(regex)
regex = regex.replace('foo', 'bar')
# etc
return regex
我不明白,你想和regex搭配什么?你现在有什么?你是在找正则表达式教程吗?我不知道你在问什么。“我只是在寻找一个起点,这样我就可以找到一种方法来实现我自己的特殊字符。”我希望能够在Python的正则表达式中使用“ISTORE”,并使它与ISTORE、ISTORE\u 0匹配。。。我知道\s将如何匹配空白。我非常熟悉编写正则表达式,但我从未尝试过弄乱引擎本身。据我所知,您希望表达式中的ISTORE被视为类似于
ISTORE(\ud)?
或(ISTORE_0 | ISTORE_1 | ISTORE_2 | ISTORE_3 | ISTORE)
。您正在询问如何扩展实际的正则表达式引擎来处理此问题,而不是添加预处理搜索和替换步骤。@kstev您真的不想扩展正则表达式引擎。我们只是在你尝试之前让你知道,然后自己去发现,这样可以节省你的时间。但这不是regex的味道。这是元字符。考虑到Java字节码中有205个操作码,这听起来对我来说并不是一个简单的查找和替换方法。这里也建议对正则表达式进行预处理:所以我应该让它每次都用(ISTORE_0 | ISTORE_1 | ISTORE_2 | ISTORE_3 | ISTORE)替换ISTORE?听起来效率太低了。@kstev,你会用ISTORE\ud+
@kstev是205条搜索和替换规则,在这方面比205条规则教正则表达式引擎差吗?关于性能,是的,我认为定制的正则表达式引擎可能比字符串替换更有效,但是您是否确定这对性能至关重要,值得付出额外的努力?