从列表中匹配PySide RegExp

时间:2013-03-17 04:55:21

标签: python regex pyqt pyside

您好我正在PySide中编写一个简单的文本编辑器,我想对某些关键字进行颜色编码。这就是我如何匹配评论。

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

匹配单个关键字

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

我怎样才能从这样的列表中匹配:

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

1 个答案:

答案 0 :(得分:0)

要匹配单个关键字(或多个),您需要定义关键字中允许的字符数。否则,您将与action中的reaction匹配,这可能不是您想要的。

匹配单个关键字的正确方法是在单词之前和之后断言单词边界\b

r'/\baction\b/'

要匹配任何关键字,您需要在单词之间使用替换|构建正则表达式:

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

此解决方案假定关键字在正则表达式中不包含任何元字符,例如.?*+[](){}\^,{ {1}},$

问题并不像转义元字符那么简单,因为还有单词边界。但是,我猜保留关键字只包含英文字母字符;如果是这种情况,应该没有任何问题。