【问题标题】:How to tokenize the regexp pattern ITSELF?如何标记正则表达式模式 ITSELF?
【发布时间】:2017-06-19 20:12:43
【问题描述】:

关于如何使用正则表达式标记某些字符串的许多问题。

不过,我正在寻找,为了标记正则表达式模式本身,我确信有一些关于该主题的帖子,但我找不到它们。

例子:

^\w$                    -> ['^', '\w', '&']
[3-7]*                  -> ['[3-7]*']
\w+\s\w+                -> ['\w+', '\s', '\w+']
(xyz)*\s[a-zA-Z]+[0-9]? -> ['(xyz)*','\s','[a-zA-Z]+','[0-9]?']

我假设当调用一些 regexp 函数时,这项工作是在 python 中完成的。

【问题讨论】:

  • 您可以将正则表达式视为有限状态机的简写:stackoverflow.com/questions/525004/…
  • 其中一个问题是诸如[-z][a-z] 之类的结构——元代码会根据它们的位置改变它们的含义。其他一些:[*]*[[]。我认为严格的从左到右解析是这样做的唯一方法。
  • BTW Python 在后台使用boost
  • 来自@AndreiSavin 链接的问题,this answer。另外,the parser 来自 oniguruma ...但这并没有完全在 python 中实现:)。

标签: python regex python-2.7 tokenize


【解决方案1】:

从一个地方开始:PyPy project 在(大部分)Python 中实现了 Python。源代码分发中的re.py 调用sre-compile.c:_compile() 来完成这项工作。你也许可以破解它来提供你想要的输出形式。

编辑 此外,Javascript XRegExp library 以扩展语法解析正则表达式并将它们呈现为标准语法。 parser routine 可以帮到你。

【讨论】:

    猜你喜欢
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多