在 R 中使用正则表达式从字符串中提取子字符串
Sub string from character string using regex in R
我正在为他们的数据抓取 PDF 报告。
我正在尝试提取报告所依据的位置。我有一个带有位置的字符串,然后滚动 13 个月 header 在这里看到:
header_line <- "Corp Dec '20 Jan '21 Feb '21 Mar '21 Apr '21 May '21 Jun '21 Jul '21 Aug '21 Sep '21 Oct '21 Nov '21 Dec '21"
我想提取从字符串开头到后面可能出现的任何月份开头的所有字符 因为它是一份 13 个月的滚动报告,它可能是位置旁边的任何月份缩写.
我在上面的示例中使用了这个,但我不确定如何使用正则表达式创建“Or 模式”。我知道我可以用循环或应用函数来暴力破解它,但我希望有一种不那么肮脏的方法。
stringr::str_extract(header_line, "[^Dec]+")
[1] "Corp "
很难预测该位置可能出现的情况,但以下解决方案可能涵盖大部分情况。它将匹配 3 个字母字符之前的所有内容,后跟 space、撇号和 2 个数字。
str_extract(header_line, '^(.*?)(?=[a-zA-Z]{3}\s\'\d{2})')
测试用例:
header_line <- "Corp Dec '20 Jan '21 Feb '21 Mar '21 Apr '21 May '21 Jun '21 Jul '21 Aug '21 Sep '21 Oct '21 Nov '21 Dec '21"
header_line2 <- "Corp multiple words Dec '20 Jan '21 Feb '21 Mar '21 Apr '21 May '21 Jun '21 Jul '21 Aug '21 Sep '21 Oct '21 Nov '21 Dec '21"
header_line3 <- "Corp multiple words 1 Dec '20 Jan '21 Feb '21 Mar '21 Apr '21 May '21 Jun '21 Jul '21 Aug '21 Sep '21 Oct '21 Nov '21 Dec '21"
header_line4 <- "Corp multiple 444 Dec '20 Jan '21 Feb '21 Mar '21 Apr '21 May '21 Jun '21 Jul '21 Aug '21 Sep '21 Oct '21 Nov '21 Dec '21"
str_extract(header_line, '^(.*?)(?=[a-zA-Z]{3}\s\'\d{2})')
[1] "Corp"
str_extract(header_line2, '^(.*?)(?=[a-zA-Z]{3}\s\'\d{2})')
[1] "Corp multiple words"
str_extract(header_line3, '^(.*?)(?=[a-zA-Z]{3}\s\'\d{2})')
[1] "Corp multiple words 1"
str_extract(header_line4, '^(.*?)(?=[a-zA-Z]{3}\s\'\d{2})')
[1] "Corp multiple 444"
我正在为他们的数据抓取 PDF 报告。 我正在尝试提取报告所依据的位置。我有一个带有位置的字符串,然后滚动 13 个月 header 在这里看到:
header_line <- "Corp Dec '20 Jan '21 Feb '21 Mar '21 Apr '21 May '21 Jun '21 Jul '21 Aug '21 Sep '21 Oct '21 Nov '21 Dec '21"
我想提取从字符串开头到后面可能出现的任何月份开头的所有字符 因为它是一份 13 个月的滚动报告,它可能是位置旁边的任何月份缩写.
我在上面的示例中使用了这个,但我不确定如何使用正则表达式创建“Or 模式”。我知道我可以用循环或应用函数来暴力破解它,但我希望有一种不那么肮脏的方法。
stringr::str_extract(header_line, "[^Dec]+")
[1] "Corp "
很难预测该位置可能出现的情况,但以下解决方案可能涵盖大部分情况。它将匹配 3 个字母字符之前的所有内容,后跟 space、撇号和 2 个数字。
str_extract(header_line, '^(.*?)(?=[a-zA-Z]{3}\s\'\d{2})')
测试用例:
header_line <- "Corp Dec '20 Jan '21 Feb '21 Mar '21 Apr '21 May '21 Jun '21 Jul '21 Aug '21 Sep '21 Oct '21 Nov '21 Dec '21"
header_line2 <- "Corp multiple words Dec '20 Jan '21 Feb '21 Mar '21 Apr '21 May '21 Jun '21 Jul '21 Aug '21 Sep '21 Oct '21 Nov '21 Dec '21"
header_line3 <- "Corp multiple words 1 Dec '20 Jan '21 Feb '21 Mar '21 Apr '21 May '21 Jun '21 Jul '21 Aug '21 Sep '21 Oct '21 Nov '21 Dec '21"
header_line4 <- "Corp multiple 444 Dec '20 Jan '21 Feb '21 Mar '21 Apr '21 May '21 Jun '21 Jul '21 Aug '21 Sep '21 Oct '21 Nov '21 Dec '21"
str_extract(header_line, '^(.*?)(?=[a-zA-Z]{3}\s\'\d{2})')
[1] "Corp"
str_extract(header_line2, '^(.*?)(?=[a-zA-Z]{3}\s\'\d{2})')
[1] "Corp multiple words"
str_extract(header_line3, '^(.*?)(?=[a-zA-Z]{3}\s\'\d{2})')
[1] "Corp multiple words 1"
str_extract(header_line4, '^(.*?)(?=[a-zA-Z]{3}\s\'\d{2})')
[1] "Corp multiple 444"