【问题标题】:OR expression in regular expression?OR 正则表达式中的表达式?
【发布时间】:2012-07-17 14:10:08
【问题描述】:

我正在尝试对结尾有温度的消息使用正则表达式。整个消息的示例如下所示:

RH= 12.1 %RH T= -3.5 'C

如果不明显,温度(以及与此问题相关的部分)为T = -3.5 'C。我想在最后捕获CF。现在我有这个表达:

"RH=\\s*(?<1>[^\\s]*)\\s%RH T=\\s*(?<2>[^\\s]\\s*'\\w)"

但这会在最后捕获任何字母数字字符。如何将最后的'\\w' 更改为“仅CF?”?

【问题讨论】:

  • 提示:使用逐字字符串并保留珍贵和罕见的反斜杠:@"RH=\s*(?&lt;1&gt;[^\s]*)\s%RH T=\s*(?&lt;2&gt;[^\s]\s*'[CF])"
  • 另一种指定OR的方式是|(例如(C|F)),但在这种情况下字符类更好。

标签: c# regex or-operator


【解决方案1】:

另一种选择是将最后的\\w 替换为c|f,意思是:c 或f。

【讨论】:

    【解决方案2】:

    好吧,如果提供的格式是确定的,不要使用复杂的正则表达式,而是简单:

    int index = data.LastIndexOf('\''); //index of last ' symbol
    data.Substring(index);
    

    应该适合你。

    【讨论】:

      【解决方案3】:

      您可以使用character class:代替\\w,写成[CF]

      【讨论】:

      • 当我这样做并将其更改为 "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])
      • 没关系,没关系,误读了我的输出。这确实有效!
      猜你喜欢
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多