如何弄清楚这个GREP正则表达式模式?

时间:2012-04-05 05:20:18

标签: regex grep pattern-matching

大型html文件中的某处:

<td headers="fee" style="cursor:pointer;" onclick="toggle('detailinfo088180');">
            $675.00 
        </td>

blabla<br><em>$650</em>">blabla/a>
    </td>
  </tr>

我需要在grep命令后只有'675.00'数字。我尝试了一些像$ [0..9]这样的正则表达式。*但它不起作用。

谢谢,

3 个答案:

答案 0 :(得分:1)

试试这个

grep -e "\$[0-9]\{1,\}\.[0-9]\{2\}"

我把“$”更好地匹配模式,你可以在grep匹配后删除它,管道另一个操作。

如果你只需要提取数字,那么你可以决定不使用grep而是使用perl:

perl -ne '/\$([0-9]+\.([0-9]+))/ && print "$1\n"' < yourfile

答案 1 :(得分:1)

您想使用连字符-而不是..来表示范围。您还需要转义$字面值,因为否则意味着行尾。

这应该看到它:grep "\$[0-9]+"

答案 2 :(得分:0)

这可以从'':

的内部HTML中提取数字

/ [0-9。] + /

问题的另一部分是获取带有价格的HTML。这是一个更完整的例子:

<html>
<head>
<script>
    function toggle(e,id) { 
        val = parseFloat(e.innerHTML.match(/[0-9.]+/));
        // Another method:
        // val = parseFloat(e.innerHTML.match(/\$([0-9.]+)/)[1]);
        alert(val);
    }
</script>
</head>
<body>

<table border=1><tr>
<td headers="fee" style="cursor:pointer;" onclick="toggle(this,'detailinfo088180');">
   $675.04 
</td>

blabla<br><em>$650</em>">blabla/a>
    </td>
  </tr>

</table>
</body>
</html>

请注意以下事项:

  • toggle()函数需要一个额外的参数,即实际点击的元素。 (假设您希望从点击的元素中提取价格)
  • 我提供了另一个更具限制性的正则表达式(必须在数字的前面有一个“$”),以防这是你需要的。该表达式使用捕获(“(..)”)来匹配字符串并提取字符串的一部分而不是整个字符串。

如果您想了解有关正则表达式如何工作的更多信息,请尝试here。或谷歌。