您好我正在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/')
答案 0 :(得分:0)
要匹配单个关键字(或多个),您需要定义关键字中允许的字符数。否则,您将与action
中的reaction
匹配,这可能不是您想要的。
匹配单个关键字的正确方法是在单词之前和之后断言单词边界\b
。
r'/\baction\b/'
要匹配任何关键字,您需要在单词之间使用替换|
构建正则表达式:
r'/\b(' + r'|'.join(reserved_words) + r')\b/'
此解决方案假定关键字在正则表达式中不包含任何元字符,例如.
,?
,*
,+
,[
,]
,(
,)
,{
,}
,\
,^
,{ {1}},$
。
问题并不像转义元字符那么简单,因为还有单词边界。但是,我猜保留关键字只包含英文字母字符;如果是这种情况,应该没有任何问题。