使用正则表达式提取字符串,该字符串在字符串中的任何位置包含特定单词

Extracting a string with regular expressions that contains a certain word anywhere in the string

我很难理解我面临的这个特定问题的正则表达式语法。我正在使用 Python.

这是我正在使用的传感器的示例输出(带有随机值),它位于一个 txt 文件中:

Sensors starting
{'device_id': 'M123'}
{'x_acc': 0.00, 'y_acc' : 0.01, 'z_acc' : 1.02}

但是我从另一台设备上得到的是这样的:

Sensors starting
{'device_id': 'S123'}
{'y_acc': 0.00, 'z_acc' : 0.01, 'x_acc' : 1.02}

我想要做的是提取 { 和 } 之间的任何内容,比方说,其中包含 'x_acc',以便它检测两个字符串,而不是 select 设备 ID 为它每隔几分钟就会在同一个文件中打印多次。

我想出了这个模式:

pattern = r'\{.*?\}'

到 select 带 { } 的行,但我想指定要选择的带 x_acc、y_acc 或 z_acc 的行。当我知道第一个项目时我能够做到这一点 - 然后我将它添加到模式中,但是由于顺序从一个设备到另一个设备发生变化,我不确定该怎么做。

您可以使用

{[^{}]*'[xyz]_acc'[^{}]*}

参见regex demo

详情:

  • { - 一个 { 字符
  • [^{}]* - 除大括号外的零个或多个字符
  • '[xyz]_acc' - 一个 ' 字符,然后是一个 xyz 字符,然后是一个 _acc' 子字符串
  • [^{}]* - 除大括号外的零个或多个字符
  • } - 一个 } 字符。