在 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
我有很多文本文件。在每个文本文件中,都有一个感兴趣的部分(如下):
<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>
并基于您的示例文本。第一个捕获组将包含类似于日期的字符串。应该注意的是,正则表达式实际上并没有验证日期,它只是匹配格式。
已解释
\s+
正则表达式将执行以下操作:
\s matches any white space character
+ allows the preceeding regex to match 1 or more times
因为我们知道会有一个回车 return、换行符和一个制表符或多个空格,所以所有这些都会被匹配。但是,如果这些空白字符在您的源文件中是可选的,那么您可以使用 \s*
。在这种情况下,*
将匹配零个或多个空白字符。
例子
请看这个live example