Regex golang中的正则表达式换行符和空格

Regex golang中的正则表达式换行符和空格,regex,go,re2,Regex,Go,Re2,我试图将下面的字符串与正则表达式匹配,并从中获取一些值 /system1/sensor37 Targets Properties DeviceID=37-Fuse ElementName=Power Supply OperationalStatus=Ok RateUnits=Celsius CurrentReading=49 SensorType=Temperature HealthState=Ok oemhp_Cauti

我试图将下面的字符串与正则表达式匹配,并从中获取一些值

/system1/sensor37
  Targets
  Properties
    DeviceID=37-Fuse 
    ElementName=Power Supply
    OperationalStatus=Ok
    RateUnits=Celsius
    CurrentReading=49
    SensorType=Temperature
    HealthState=Ok
    oemhp_CautionValue=100
    oemhp_CriticalValue=Not Applicable
使用下面的正则表达式

`/system1/sensor\d\d\n.*\n.*\n\s*DeviceID=(?P<sensor>.*)\n.*\n.*\n.*\n\s*CurrentReading=(?P<reading>\d*)\n\s*SensorType=Temperature\n\s*HealthState=(?P<health>.*)\n`
`/system1/sensor\d\d\n.*\n.*\n\s*设备ID=(?P.*)\n.*\n.*\n.*\n\n\s*当前读取=(?P\d*)\n\s*传感器类型=温度\n\s*健康状态=(?P.*)\n`
现在我的问题是:有没有更好的方法?
我明确提到了字符串中的每一行和空白组。但是我可以说
/system.sensor\d\d.*DeviceID=(?P.*)\n*
(这对我来说不起作用,但我相信应该有办法做到。)

默认情况下

与换行符不匹配。要更改此设置,请使用
s
标志:

(?s)/system.sensor\d\d.*DeviceID=(?P<sensor>.*)
(?s)/system.sensor\d\d.*设备ID=(?P.*)
发件人:

(?标志)
设置当前组内的标志;不捕获
s
-让
匹配
\n
(默认为false)


如果您想以较短的方式使用正则表达式获得这些属性,您首先要使用
(?s)
[在Kobi的答案中的含义和用法]。对于每个属性,请使用以下语法:
*ExampleProperty=(?P[^\n]*)。

*
-“忽略”所有开头和结尾的文本(匹配,但不捕获);
ExampleProperty=
-停止“忽略”文本;
(?P..)
-命名的捕获组;
[^\n*]
-匹配属性中的值,直到找到新行字符

因此,这是短正则表达式,它将匹配您的文本并获得所有这些属性:

(?s)\/system.\/sensor\d\d.+DeviceID=(?P<sensor>[^\n]*).*CurrentReading=(?P<reading>[^\n]*).*SensorType=(?P<type>[^\n]*).*HealthState=(?P<health>[^\n]*).*
(?s)\/system.\/sensor\d\d.+DeviceID=(?P[^\n]*).*CurrentReading=(?P[^\n]*).*SensorType=(?P[^\n]*).*HealthState=(?P[^\n]*)*

=37保险丝
= 49
=温度
=好的
[演示]

<sensor> = 37-Fuse 
<reading> = 49
<type> = Temperature
<health> = Ok