簡體   English   中英

Python正則表達式不匹配行尾

[英]Python regular expression not matching end of line

我正在嘗試使用相當復雜的正則表達式來匹配C / C ++函數定義。 我發現了一個不起作用的案例,我試圖理解為什么。 這是輸入字符串不匹配:

   void Dump(const char * itemName, ofstream & os)

這顯然是一個有效的C ++方法聲明。 這是RE:

   ^[^=+-|#]*?([\w<>]+\s+(?!if|for|switch|while|catch|return)\w+)\s*\([^;=+-|]*$

這基本上試圖區分其他看起來像方法聲明的C語法,即具有單詞后跟paransheses的語法。

使用非常有用的Python正則表達式調試器(http://www.pythonregex.com/)我將其縮小到尾隨“$” - 如果我刪除正則表達式中的尾隨$,它匹配上面的方法簽名; 如果我留在$,它不會。 必須有一些Python RE的特性,這是我在這里躲避的。 謝謝。

使用+-| 在你的角色類中[^;=+-|]是一個范圍規范。 這將導致包含(實際排除,因為您正在使用^ )的字符類遠遠超出您的意圖。 要指定文字-在字符類中,首先提及它,如[^-;=+|]

PythonRegex的輸出有點誤導。 r.groups()r.findall()結果都是相同的: u'void Dump' ,這是第一個捕獲組的內容。 如果它顯示了整個匹配,你會看到當刪除$你只是匹配

void Dump(

...不是你想要的整個功能定義。 原因(正如Greg解釋的那樣)是你上一個字符類中的語法錯誤。 您需要首先列出連字符( [^-;=+|] )或最后( [^;=+|-] ),或者添加反斜杠( [^;=+\\-|] )來轉義連字符。

我能看到讓PythonRegex顯示整個匹配的唯一方法是刪除所有捕獲組(或將它們轉換為非捕獲組)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM