2013-11-14 2 views
1

Я хочу найти точное слово «SUBRECORD» с любым количеством пробелов до и после него. Я пробовал:Регулярное выражение для соответствия точному слову с любым количеством пробелов до и после него

\s*SUBRECORD\s* 
[ ]*SUBRECORD[ ]* 
(\s)*SUBRECORD(\s)* 

но никто из них не работает.

EDIT:

это фрагмент кода, который не работает:

QStringList list; 
list.append("RECORD \"DEFSTA\" \"Definition des Stations\""); 
list.append(" STRING  (2) \"Version\";"); 
list.append(" SUBRECORD (2) \"Nb de Stations\";"); 
list.append(" STRING (30) \"Nom de la Station\"; "); 
list.append(" INTEGER (2) \"Numero de la Station\";"); 
list.append(" INTEGER (4) \"Extra charge\";"); 
list.append(" STRING (5) \"Mnemonique Station\";"); 
list.append(" DUMMY  (1) \"Réserve\";"); 
list.append(" ENDSUBRECORD;"); 
list.append(" SIGNATURE  \"Signature\" ; "); 
list.append("ENDRECORD;"); 

qDebug() << "LAST INDEX OF SUBRECORD:" << list.lastIndexOf(QRegExp("\\s*SUBRECORD\\s*")); 
+1

В каком тексте вы просматриваете? [Эти регулярные выражения выглядят правильно.] (Http://regexr.com?376c7) – Nightfirecat

+0

Я читаю текстовый файл по строкам, а затем в строке, я хочу видеть, существует ли слово SUBRECORD. строка может выглядеть так: 'SUBRECORD (2)« Nb de Parametres »;' – Barracuda

+0

На каком языке вы используете? – hwnd

ответ

2

Причина:

lastIndexOf(...) только возвращает индекс, если есть точное соответствие всей линии , Это из документации Qt:

int QStringList::lastIndexOf (const QRegExp & rx, int from = -1) const

Возвращает индекс позиции последнего точного соответствия ПРМ в списке поиска в обратном направлении от позиции индекса с. Если от -1 (по умолчанию), поиск начинается с последнего элемента. Возвращает -1, если ни один элемент не соответствует.

Поскольку \s*SUBRECORD\s* не соответствует линии точно, не считать это матч.


Решение:

Вместо этого попробуйте: .*\\s+SUBRECORD\\s+.*

Дополнительный .* соответствует ничего лишнего в начале и в конце.

\s+ гарантирует, что по крайней мере один пробел (спасибо @ T.V.) - также, дополнительный \ является обратный слеш при вводе в QString (спасибо @MoKi).

+0

Решение, которое вы предложили, приведет к индексу 'ENDSUBRECORD;' return. –

+0

Спасибо, я поменял его на \ s +, чтобы он искал хотя бы один пробел – bcorso

+1

. Правильная форма заключалась бы в использовании двойных escape-символов, которые являются '. * \\ s + SUBRECORD \\ s +. *', Так как Qt принимает ' QString' как аргумент конструктора 'QRegExp'. и да, вы правы в этом, соответствующем всей линии. – Barracuda