使用正则表达式提取字符串,该字符串在字符串中的任何位置包含特定单词
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'
- 一个 '
字符,然后是一个 x
、y
或 z
字符,然后是一个 _acc'
子字符串
[^{}]*
- 除大括号外的零个或多个字符
}
- 一个 }
字符。
我很难理解我面临的这个特定问题的正则表达式语法。我正在使用 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'
- 一个'
字符,然后是一个x
、y
或z
字符,然后是一个_acc'
子字符串[^{}]*
- 除大括号外的零个或多个字符}
- 一个}
字符。