2017-09-26 31 views
1

我有很多文本文件。在每個文本文件中,有一個感興趣的部分(如下):在stringr中使用str_match

<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"> 

但是,我不知道該怎麼做,因爲該字符串分佈在兩行。我能做什麼? (它也包含了中國字,但這是另外一個問題)

但我不知道怎麼做,因爲

+1

我建議,如果您的日期格式更改嘗試正則表達式。你可以通過這個鏈接瀏覽初學者:https://www.regular-expressions.info/rlanguage.html –

+0

如果你解析HTML,我建議使用'rvest'來提取表標籤之間的文本。那麼你不需要擔心額外的HTML。 –

回答

1

用正則表達式做這

這不建議使用正則表達式因爲所有可能出現的模糊的邊緣情況都可能出現,所以請解析HTML,但似乎您可以對HTML進行一些控制,因此您應該能夠避免regex police的大部分邊緣情況。

用正則表達式

提出的解決方案,你可以使用\s+,其中回車和新行會。得到的正則表達式應該是這樣的:

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

enter image description here **要看到圖像更好,只需右鍵點擊圖片並選擇在新視窗查看

並可根據您的示例文本。然後第一個捕獲組將包含類似日期的字符串。應該指出的是,正則表達式實際上並沒有驗證日期,它只是匹配格式。

解釋

\s+正則表達式將執行以下操作:

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

因爲我們知道會有一個回車,新的生產線,並且這似乎是一個標籤或多個空格,則所有那些將被匹配。但是,如果這些空格字符在源文件中是可選的,那麼您可以使用\s*。在這種情況下,*將匹配零個或多個空白字符。

請參閱本live example

相關問題