在 stringr 中使用 str_match

Using str_match in stringr

我有很多文本文件。在每个文本文件中,都有一个感兴趣的部分(如下):

    <tr>
        <td ><b>发起时间</b></td>
        <td colspan="2" style="text-align: left">2015-04-08</td>
        <td style="width: 25%;"><b>回报机制</b></td>
        <td colspan="2" style="text-align: left">使用者付费</td>
    </tr>

不同文件的信息只有日期。在本例中,日期为 2015-04-08.

我想提取日期。我是 R 用户,我通常会使用 stringr 包中的 str_match。我会将以下内容指定为字符串的开头:

        <td ><b>发起时间</b></td>
        <td colspan="2" style="text-align: left">

但是,鉴于此字符串分布在两行中,我不确定该怎么做。我能做什么? (它也包含汉字,但这是一个单独的问题)

但我不确定该怎么做,因为

用正则表达式做

不建议使用正则表达式来解析 HTML,因为可能会出现所有可能的模糊边缘情况,但似乎您对 HTML 有一定的控制权,所以您应该能够避免许多 regex police 哭泣的边缘情况。

建议的正则表达式解决方案

你能用 \s+ 来代替回车 return 和新行吗?生成的正则表达式如下所示:

<td ><b>发起时间<\/b><\/td>\s+<td colspan="2" style="text-align: left">([0-9]{4}-[0-9]{2}-[0-9]{2})<\/td>

** 要更好地查看图像,只需右键单击图像并 select 在新 window

中查看

并基于您的示例文本。第一个捕获组将包含类似于日期的字符串。应该注意的是,正则表达式实际上并没有验证日期,它只是匹配格式。

已解释

\s+ 正则表达式将执行以下操作:

\s matches any white space character
+ allows the preceeding regex to match 1 or more times

因为我们知道会有一个回车 return、换行符和一个制表符或多个空格,所以所有这些都会被匹配。但是,如果这些空白字符在您的源文件中是可选的,那么您可以使用 \s*。在这种情况下,* 将匹配零个或多个空白字符。

例子

请看这个live example