QRegExp从QString中删除包含文本的行

时间:2016-05-01 16:07:51

标签: regex qstring qregexp

我想从QString中删除所有包含文本的行并保留数字。

在运行正则表达式之前,我的QString输出如下:

hello

1

world

2

如果我运行

之类的东西
QString.remove(QRegExp("(^[a-z]*\\n$)"))

我的QString输出将是:

1

2

1 个答案:

答案 0 :(得分:1)

由于QRegExp没有类似Perl的/m修饰符,因此您需要使用(^|\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]匹配任何非数字字符,而不是换行符。