2016-05-01 6 views
1

Я хотел бы удалить все строки из QString с текстом и сохранить те, которые являются числами.QRegExp удалить строку с текстом из QString

До запуска регулярному_выражению мой выход QString быть так:

hello 

1 

world 

2 

если я побежал что-то вроде

QString.remove(QRegExp("(^[a-z]*\\n$)")) 

мой выход QString будет:

1 

2 
+0

В чем проблема? есть ошибка, регулярное выражение не работает? – rock321987

+0

Невозможно определить правильное регулярное выражение. – bandito40

ответ

1

С QRegExp не имеет модификатора Perl-типа /m, вам нужно использовать группы lik e (^|\n) и ($|\n). Кроме того, принимая во внимание переносами может включать в себя возврат каретки, я хотел бы использовать что-то вроде

(^|\r?\n)[a-z]*\r?\n(\r?\n|$) 

См regex demo

Qt:

QString t = "hello\n\n1\n\nworld\n\n2"; 
t.replace(QRegExp("(^|\r?\n)[a-z]*\r?\n(\r?\n|$)"), "\\1"); 

ПРИМЕЧАНИЕ, что этот код будет только удалить линии которые состоят только из строчных букв ASCII и строки после них. Если вам нужно просто удалить все строки, которые не являются числовыми, используйте QRegExp("(^|\r?\n)[^\\d\n]+\r?\n(\r?\n|$)"), где [^\d\n] соответствует любому символу без цифр, а не символу новой строки.

+0

Я не мог заставить ваш пример работать для моих нужд. Я просто конвертировал его в QStringList и делал это по строкам. Единственная причина, по которой я хотел сделать это с регулярным выражением, состояла в том, чтобы сохранить некоторые строки кода. Спасибо, что они отвечают. – bandito40

+0

Всегда сложно помочь с многострочными проблемами, так как есть много нюансов. Рад, что вы нашли способ решить вашу проблему. –