【问题标题】:QRegExp remove line with text from QStringQRegExp 从 QString 中删除带有文本的行
【发布时间】:2016-05-01 16:07:51
【问题描述】:

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

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

hello

1

world

2

如果我跑了类似的东西

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

我的 QString 输出将是:

1

2

【问题讨论】:

  • 那有什么问题呢?是否有错误,正则表达式不起作用?
  • 无法找出正确的正则表达式。

标签: regex qstring qregexp


【解决方案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] 匹配任何非数字字符而不是换行符。

【讨论】:

  • 我无法让您的示例满足我的需求。我最终只是将它转换为 QStringList 并逐行执行。我想使用正则表达式的唯一原因是为了节省一些代码行。感谢他们的回答。
  • 解决多行问题总是很困难,因为存在很多细微差别。很高兴您找到了解决问题的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多