2012-10-01 26 views
0

是否有任何簡單的方法可以將自定義擴展添加到正則表達式引擎 ? (特別是對於Python,但我也會採用 的通用解決方案)。創建自定義擴展到正則表達式引擎

這可能更容易解釋我正在嘗試使用 示例構建的內容。這裏是我想到的用例:

我希望用戶能夠匹配可能包含任意 ASCII字符的字符串。正則表達式是一個很好的開始,但對於我所想到的數據類型來說,這並不足夠。例如,假設我 有一個包含這樣的字符串數據:

<STX>12.3,45.6<ETX> 

其中<STX><ETX>是文本字符 0×02和0×03文/結束的開始。要捕獲這兩個數字,用戶可以方便地在其表達式中指定任何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

我想這可能爲你工作:http://stackoverflow.com/a/2759009/1709129只是刪除插入符號 – rbernabe

回答

2

\x轉義由Python正則表達式解析器已經支持:

>>> 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>