【问题标题】:Problem in matching string with regex awk使用正则表达式 awk 匹配字符串的问题
【发布时间】:2020-05-06 21:03:50
【问题描述】:

我有这个字符串要使用正则表达式 awk 进行匹配:

如果 ldcTotal 0.000000

所以我尝试了这个:

if(match(linha, /^(\t| )*(if)(\t| )+(\<ldc\w*)[ \t]*([<>])[ \t]*(ldc\w*|[0-9]|[0-9]+(\.[0-9]*))/) > 0){ 
            print "match: "substr($0, RSTART, RLENGTH);
        }

但这只是得到带有 > 或

什么是正确的正则表达式? 谢谢

【问题讨论】:

  • 使用&lt;&gt; 而不是[&lt;&gt;]。后者匹配&lt;&gt;,而不是组合字符串。
  • 这会导致语法错误。
  • 为什么? &lt;&gt; 在 awk 正则表达式中没有特殊含义。
  • 是的,有! 表示隔离一个像 这样的词
  • No \&lt;\&gt; 是单词边界:需要反斜杠。

标签: regex awk


【解决方案1】:

我只是忘了加括号:

 if(match(linha, /^(\t| )*(if)(\t| )+(\<ldc\w*)[ \t]*(<>)[ \t]*(ldc\w*|[0-9]|[0-9]+(\.[0-9]*))/) > 0){ 
        print "match: "substr($0, RSTART, RLENGTH);
    }

谢谢

【讨论】:

  • 为什么需要所有的 ccapture 组?
  • 使用 gsub 替换组
猜你喜欢
  • 1970-01-01
  • 2013-04-13
  • 2016-07-31
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 2020-05-07
  • 2021-07-10
相关资源
最近更新 更多