我试图突出显示字符串中出现的某个单词,但这个单词可以更改,并且可以包含字母数字字符,以及类似#'#',&#39 ; $',' - ',' _'。
现在我有这个:
pattern = "\\b" + QRegExp.escape(word) + "\\b"
regex = QRegExp(pattern)
index = regex.indexIn(self.edit_box.toPlainText(), pos)
然后通过使用某种背景颜色移动光标,根据起始索引和所选单词的长度突出显示。
以下情况存在问题:
sentence = "#ff0000 hey this is a test #ff0000"
word = "#ff0000"
pattern = "\\b" + QRegExp.escape(word) + "\\b"
regex = QRegExp(pattern)
pos = 0
index = regex.indexIn(sentence, pos)
while (index != -1):
print 'this is entered'
print 'done!'
output: done!
似乎是一个领先的'#'可能只是将正则表达式模式视为注释,即使使用QRegExp.escape()也是如此。
答案 0 :(得分:2)
使用#
模式时,您需要在\b#ff000\b
之前显示单词char。一般来说,\b
word boundaries是依赖于上下文的,因此,只要您的搜索词是动态的并且可能包含特殊字符,您就需要考虑使用替代字符。
如果您只想阻止在搜索词之前和之后出现任何字词字符,请使用
pattern = "(?:^|\\W)(" + QRegExp.escape(word) + ")(?!\\w)"
如果您只想在空格和字符串的开头/结尾之间匹配搜索词,请使用
pattern = "(?:^|\\s)(" + QRegExp.escape(word) + ")(?!\\S)"
要获得正确的索引,在检查是否与rx.indexIn
匹配后,您可以使用regex.pos(1)
获得第1组匹配的必要索引。