2013-03-17 35 views
0

您好,我正在PySide中編寫一個簡單的文本編輯器,並且我想爲某些ketwords添加顏色代碼。這是我如何匹配評論。PySide RegExp與列表中的匹配

comment = QtCore.QRegExp(r'\(\*(.*)?') 

匹配單個關鍵字

keyword = QtCore.QRegExp(r'/action/') 

我將如何能夠從這樣的匹配列表:

reserved_words = ["if", "else", "elseif", "while"] 
keywords = QtCore.QRegExp(r'/match_the_reserced_kewords_here/') 

回答

0

匹配一個關鍵字(或多個),你需要定義關鍵字中允許使用哪些字符。否則,您將在reaction中匹配action,這可能不是您想要的。

匹配單個關鍵字的正確方法是在該單詞之前和之後聲明單詞邊界\b

r'/\baction\b/' 

要匹配任何關鍵字,你需要構建與交替|正則表達式中的單詞之間:

r'/\b(' + r'|'.join(reserved_words) + r')\b/' 

此解決方案假定關鍵字不包含任何正則表達式元字符,如.?*+[](){},\,^, $,|

問題不像轉義元字符那麼簡單,因爲還有字邊界。但是,我猜想保留關鍵字只包含英文字母字符;如果是這樣的話,不應該有任何問題。

+0

謝謝:)你知道如何在關鍵字不匹配的情況下如果有評論? – user1976336 2013-03-20 01:46:10

+0

@ user1976336:我不知道。你應該看看現有的代碼高亮庫,看看它們是如何做到的。 – nhahtdh 2013-03-20 05:46:30