有没有简单的方法可以添加自定义扩展程序 正则表达引擎? (特别是对于Python,但我会采取 一般的解决方案)。
可能更容易解释我正在尝试使用的构建 例。以下是我的用例:
我希望用户能够匹配可能包含任意内容的字符串 ASCII字符。正则表达式是一个良好的开端,但事实并非如此 对于我想到的数据类型来说已经足够了。例如,说我 拥有包含如下字符串的数据:
<STX>12.3,45.6<ETX>
其中<STX>
和<ETX>
是文本开头/文字结尾字符
0x02和0x03。为了捕获这两个数字,它会非常
方便用户能够指定任何ASCII
表达中的人物。像这样:
\x02(\d\d\.\d),(\d\d\.\d)\x03
“\ x02”和“\ x03”匹配控制字符和 第一个和第二个匹配组是数字。所以,像 正则表达式只有几个特定于域的附加组件。
我应该怎么做呢?这是否是正确的方法? 我不得不相信这种问题已经解决了,但我最初的问题 搜索没有发现任何有希望的东西。正则表达式 众所周知的优势,保持学习曲线。
一些注意事项:
编辑:感谢您的答复到目前为止,我还没有意识到Python re
支持任意ascii字符。但是,这仍然不是我想要的。这是另一个希望最终给出我想要的广度的例子:
假设我的数据包含这样的字符串:
$\x01\x02\x03\r\n
123
形成两个12位整数(0x010和0x023)。那么我怎样才能添加语法,以便用户可以将其与正则表达式匹配:
\$(\int12)(\int12)\x0d\x0a
\int12
每个都提取12位。如果尝试搜索打包数据,这将非常方便。
答案 0 :(得分:2)
\x
转义符:
>>> import re
>>> regex = re.compile(r'\x02(\d\d\.\d),(\d\d\.\d)\x03')
>>> regex.match('\x0212.3,45.6\x03')
<_sre.SRE_Match object at 0x7f551b0c9a48>