C# 还是正则表达式中的表达式?
我试图使用一个正则表达式来表示一条消息,该消息的末尾有一个温度。整个消息的示例如下所示:C# 还是正则表达式中的表达式?,c#,regex,or-operator,C#,Regex,Or Operator,我试图使用一个正则表达式来表示一条消息,该消息的末尾有一个温度。整个消息的示例如下所示: RH= 12.1 %RH T= -3.5 'C 如果温度不明显,则温度(以及与此问题相关的部分)为t=-3.5'C。我想在结尾捕获C或F。现在我有一个表达: "RH=\\s*(?<1>[^\\s]*)\\s%RH T=\\s*(?<2>[^\\s]\\s*'\\w)" “RH=\\s*(?[^\\s]*)\\s%RH T=\\s*(?[^\\s]\\s*”\\w) 但这将在最后
RH= 12.1 %RH T= -3.5 'C
如果温度不明显,则温度(以及与此问题相关的部分)为t=-3.5'C
。我想在结尾捕获C
或F
。现在我有一个表达:
"RH=\\s*(?<1>[^\\s]*)\\s%RH T=\\s*(?<2>[^\\s]\\s*'\\w)"
“RH=\\s*(?[^\\s]*)\\s%RH T=\\s*(?[^\\s]\\s*”\\w)
但这将在最后捕获任何字母数字字符。如何更改最后一个
'\\w'
结尾处的“仅C
或F
?”?您可以使用a:而不是\\w
,写[CF]
您可以使用a:而不是\\w
,写[CF]
如果提供了明确的格式,不要使用复杂的正则表达式,但要简单:
int index = data.LastIndexOf('\''); //index of last ' symbol
data.Substring(index);
应该适合您。好吧,如果提供的formt是确定的,不要使用复杂的正则表达式,而是简单的:
int index = data.LastIndexOf('\''); //index of last ' symbol
data.Substring(index);
应该适合你。另一种选择是用
c | f
替换最后的\\w
,意思是:要么是c要么是f。另一种选择是用c | f
替换最后的\\w
,意思是:要么是c要么是f。提示:使用逐字字符串并保留珍贵和罕见的反斜杠:@“RH=\s*(?[^\s]*)\s%RH T=\s*(?[^\s]\s*”[CF])“
另一种指定OR的方法是
(例如(C | F)
,但字符类在这种情况下更好。提示:使用逐字字符串并保留珍贵和罕见的反斜杠:@“RH=\s*(?[^\s]*)\s]\s%RH T=\s*(?[^\s].[/CF>”)是另一种指定的方法(例如,(C | F)
),但在这种情况下字符类更好。当我这样做并将其更改为“RH=\\s*(?[^\\s]*)\\s%RH T=\\s*(?[^\\s]\\s*”\\w)时,它会告诉匹配的字符不是C或F。到目前为止,它已经匹配了a、1甚至。@Sterling:我不明白:看起来你还没有将\\w
更改为[CF]
?哦,粘贴了错误的表达式-RH=\\s*(?[^\\s]*)\\s%RH T=\\s*(?[^\\s]\\s*'[CF])Nevermind,Nevermind误读了我的输出。这确实有效!当我这样做并将其更改为“RH=\\s*(?[^\\s]*)\\s%RH T=\\s*(?[^\\s]\\s*\\s*\\s*.\\w)“,它告诉匹配的字符不是C或F。到目前为止,它已经匹配了a、1甚至uu。@Sterling:我不明白:看起来你没有将\\w
更改为[CF]
?哦,粘贴了错误的表达式-RH=\\s*(?[^\\s]*)\\s%RH t=\\s*(?[^\\s]\\s*[CF])Nevermind,Nevermind误读了我的输出。这确实有效!