我想突出顯示出現在字符串中的某個單詞,但這個單詞可以更改,並可以以字母數字字符以及'#','$',' - '和'_' 。在Python中,如何匹配可能以#字符開頭的QRegExp字符串?
現在我有這樣的:
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()。
單詞邊界是單詞字符(字母,數字,下劃線)與非單詞字符(其他所有內容)或字符串的開始/結尾之間的邊界。空格和#都是非單詞字符。您可以使用lookarounds構建自定義邊界,例如'(?<!\ w)#ff0000(?!\ w)'。 –
我不認爲[QRegExp](http://doc.qt.io/qt-4.8/qregexp.html)支持lookbehind。我猜''pattern =「(?:^ | \\ W)(」+ QRegExp.escape(word)+「)(?!\\ w)」'會在這裏做,只是應該採用組1的索引, 'regex.pos(1)'。 –
@WiktorStribiżew似乎是如此,那麼使用替代和重新安排索引的替代方案已經在您的答案中。 –