我试图将下面的字符串与正则表达式匹配,并从中获取一些值.
/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
Run Code Online (Sandbox Code Playgroud)
使用下面的正则表达式
`/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`
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:有更好的方法吗?我明确提到了字符串中的每个新行和空格组.但我可以这么说/system.sensor\d\d.*DeviceID=(?P<sensor>.*)\n*.(它对我不起作用,但我相信应该有办法解决它.)
默认情况下.,不符合换行符.要更改它,请使用s标志:
(?s)/system.sensor\d\d.*DeviceID=(?P<sensor>.*)
Run Code Online (Sandbox Code Playgroud)
来自:RE2正则表达式语法参考
(?flags)在当前组中设置标志; 非捕获
s- 让.匹配\n(默认为false)