0

您好,我正在 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/')
4

1 回答 1

0

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

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

r'/\baction\b/'

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

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

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

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

于 2013-03-17T06:38:11.170 回答