是否有任何简单的方法可以将自定义扩展添加到正则表达式引擎?(特别是对于 Python,但我也会采用通用解决方案)。
用一个例子来解释我正在尝试构建的内容可能会更容易。这是我想到的用例:
我希望用户能够匹配可能包含任意 ASCII 字符的字符串。正则表达式是一个好的开始,但对于我心目中的数据类型来说还不够。例如,假设我有包含如下字符串的数据:
<STX>12.3,45.6<ETX>
其中<STX>
和<ETX>
是文本开始/文本结束字符 0x02 和 0x03。要捕获这两个数字,用户能够在其表达式中指定任何 ASCII 字符将非常方便。像这样:
\x02(\d\d\.\d),(\d\d\.\d)\x03
其中“\x02”和“\x03”匹配控制字符,第一个和第二个匹配组是数字。所以,就像正则表达式一样,只有几个特定领域的附加组件。
我该怎么做呢?这甚至是正确的方法吗?我必须相信这类问题已经解决了,但我最初的搜索并没有发现任何有希望的东西。正则表达式具有众所周知的优势,可以降低学习曲线。
几点注意事项:
- 我不是在寻找特定协议的固定解析器 - 它需要通用且用户可配置
- 我真的不想编写自己的正则表达式引擎
- 虽然这很好,但我不是在寻找“正则表达式宏”,我在其中为少数常用表达式创建快捷方式。(也许是一个后续问题......)
- 奖励:您是否听说过任何学术工作,即“创建特定领域的搜索语言”
编辑:感谢到目前为止的回复,我还没有意识到 Pythonre
支持任意 ascii 字符。但是,这仍然不是我想要的。这是另一个示例,希望最终能提供我想要的广度:
假设我有包含如下字符串的数据:
$\x01\x02\x03\r\n
其中123
形成两个 12 位整数(0x010 和 0x023)。那么我如何添加语法以便用户可以将它与这样的正则表达式匹配:
\$(\int12)(\int12)\x0d\x0a
其中\int12
's 每个拉出 12 位。如果尝试搜索打包数据,这将很方便。