代码之家  ›  专栏  ›  技术社区  ›  Lucian

缺少空格时使用正则表达式提取值

  •  0
  • Lucian  · 技术社区  · 8 年前

    我试图从下面的输出中提取文本和第三列。我的问题是有一行缺少空格。在这种情况下,可以提取该值吗?

    4086   process-working          841901      841901      1234        22
    4297   procesor_stats_controller_fmm543182      543182      0           22
    4028   ipv6_ma                  3063025     3063025     -55         78
    4280   tty-verifyd              694043      694043      0           22
    

     \d+\s+(\w+-?\w+)\s*\d+\s+\d+\s+(-?\d+)\s+\d+
    

    非常感谢。

    编辑:这实际上是设备中的一个bug,至少应该有一个空间,所以我会让他们修复它,然后重试。感谢您抽出时间回答这个问题:)

    2 回复  |  直到 8 年前
        1
  •  2
  •   glenn jackman    8 年前

    在这种情况下,我首先将行拆分为字段

    foreach line $lines {
        set fields [regexp -inline -all {\S+} $line]
        if {[llength $fields] == 6} {
            puts [lindex $fields 2]
        } else {
            # extract the digits at the end of this field
            regexp {\d+$} [lindex $fields 1] value
            puts $value
        }
    }
    
    841901
    543182
    3063025
    694043
    
        2
  •  0
  •   Shashank    8 年前

    问题在于 \w \w [a-zA-Z0-9_] 因此,它也将与数字匹配(因为缺少空格)。

    使用 [a-zA-Z_]

    \d+\s+([a-z]+-?[a-z]+)\s*(\d+)\s+\d+\s+\d+\s+\d+