【问题标题】:Regular expression for parse xrandr response用于解析 xrandr 响应的正则表达式
【发布时间】:2016-05-28 19:15:29
【问题描述】:

我需要在 Ubuntu 上的 Qt 应用程序中获得显示支持的分辨率。我通过 QProcess 运行 xrandr 命令并在以下视图中接收显示分辨率:

屏幕 0:最小 320 x 200,当前 1366 x 768,最大 8192 x 8192 VGA-0断开(正常左倒右x轴y轴) LVDS 连接初级 1366x768+0+0(正常左倒右 x 轴 y 轴)344mm x 193mm

 1366x768      59.99*+
 1280x720      59.86  

等等

这个案例的正则表达式是什么?首先,我可以删除决议之前的所有文本,然后使用类似
^\s+ | [0-9]*x[0-9] | *\s+$

^\s+| [0-9]* ([0-9]) * (x) d{3}  |\s+| 

任何建议都会有所帮助。谢谢。

【问题讨论】:

  • 您要提取所有分辨率吗?使用QRegExp("\\d+\\s*x\\s*\\d+")(见regex demo
  • 仅在正文之后列出的那些。
  • 啊哈,所以,"(?m)^\\s*(\\d+\\s*x\\s*\\d+)"。对吗?
  • 是的,就是这样!谢谢!
  • 如果你确切地知道你使用的是什么(QRegExp 或 QRegularExpression),我也可以发布一个示例代码。

标签: c++ regex qt


【解决方案1】:

由于您要匹配行中第一个文本的分辨率,因此可以使用正则表达式,如

"(?:^|[\r\n]+) *(\\d+ *x *\\d+)"

第一个非捕获组 (?:^|[\r\n]) 匹配字符串或换行符的开头, * 匹配零个或多个空格,然后是第二个捕获组,匹配 1+ 个数字,0+空格,x,又是 0+ 个空格和 1+ 个数字。

regex demo

示例 Qt 演示:

QRegExp rx("(?:^|[\r\n]+) *(\\d+ *x *\\d+)");
int pos = 0;
while ( (pos = rx.search(text, pos)) != -1 ) 
{
     someFunction(rx.cap(1));
}

【讨论】:

  • 谢谢,现在我将尝试将其添加到 Qt 应用程序中并查看提取结果
  • (?:^|[\r\n]+) *(\\d+ *x *\\d+) 应该匹配多行字符串。
  • 像魅力一样工作!非常感谢你!我不经常使用正则表达式,所以需要一些帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 2021-07-28
  • 1970-01-01
  • 2013-12-31
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多