2013-02-08 68 views
8

Python提供了一個標誌(re.X or re.VERBOSE)允許正則表達式的註解:蟒蛇re.X VS AUTOMAGIC續行

a = re.compile(r"""\d + # the integral part 
        \. # the decimal point 
        \d * # some fractional digits""", re.X) 

然而,隨着自動字符串連接,可以基本實現同樣的事情:

a = re.compile(r'\d+' # integral part 
       r'\.' # decimal point 
       r'\d*' # optional fractional digits 
      ) 

我不認爲我真的看到過使用後一種形式,但(恕我直言)它使一個更容易閱讀正則表達式(我不需要試圖找出哪些空白已經逃脫,並且什麼空白被忽略......等等)和我的評論得到由我的文本編輯器格式化爲評論。有沒有理由偏好前者而不是後者或簽證詩?或者這真的是番茄番茄問題?

回答

4

前者可以放在自己的文本文件中,然後加載而不需要求助於literal_eval。使用複雜的RE(或選擇多個不同的RE),這可能是一個好處。

3

我會說這是番茄tomahto。 「x」正則表達式標誌不是python專有的,並且在連接操作更加冗長的語言中可能更有意義(想像+無處不在增加噪音)。

我還考慮這樣一個事實,它強制您正確地指出哪些空白是表達式的一部分,因爲它消除了任何歧義,並且很難錯過依賴於空白的regexen中的怪癖。

最後一個說法是,您可以將確切的模式複製到具有相同標誌的另一種語言,並且它可以毫不費力地工作。在後一種情況下,我不得不刪除大量的r s和撇號。


通過你總是可以用的re.X選項拼接的方式。

+0

是的 - 我沒有意識到其他語言有這個功能 - 我想這是因爲我曾經使用'regex'的唯一地方是Python,簡單的sed表達式,並且偶爾會添加到我的emacs中語法表。那是個很好的觀點。 – mgilson 2013-02-08 14:52:52