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