Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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正则表达式引擎添加特殊字符_Python - Fatal编程技术网

向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条规则教正则表达式引擎差吗?关于性能,是的,我认为定制的正则表达式引擎可能比字符串替换更有效,但是您是否确定这对性能至关重要,值得付出额外的努力?