如何在R中的字符串之前提取固定数量的字符
How to extract a fixed number of characters before a string in R
我有一段文本在文档的某处包含对法庭案件的引用,例如
x <- "2009 U.S. LEXIS"
我知道它总是一个四位数的年份加上模式“U.S.LEXIS”前面的space。我应该如何提取这四位年份?
谢谢
你可以试试:
x <- "2009 U.S. LEXIS"
as.numeric(sub('.*?(\d{4}) U.S. LEXIS', '\1', x))
#[1] 2009
使用stringr::str_extract
:
as.numeric(stringr::str_extract(x, '\d{4}(?= U.S. LEXIS)'))
我们可以使用 parse_number
来自 readr
library(readr)
parse_number(x)
#[1] 2009
数据
x <- "2009 U.S. LEXIS"
stringr库中的substr函数解决
substr(x,1,4)
如果你需要转换成数字,那么你可以return它as.numeric
as.numeric(substr(x,1,4))
我觉得你给的data/vector不足以让这里的专家解决你的问题
更新试试这个
str_extract_all(x, "\d{4}(?=\sU.S.\sLEXIS)")
[[1]]
[1] "2009" "2015" "1990"
或将这些提取为数字
lapply(str_extract_all(x, "\d{4}(?=\sU.S.\sLEXIS)"), as.numeric)
[[1]]
[1] 2009 2015 1990
旧答案 此外,我也是 regex
的新手,因此我的解决方案可能不是一个非常干净的方法。通常,您的情况是以 regex
模式搜索嵌套组。不过,你可以试试这个方法
x <- "aabv 2009 U.S. LEXIS abcs aa 2015 U.S. LEXIS 45 fghhg ds fdavfd 1990 U.S. LEXIS bye bye!"
> x
[1] "aabv 2009 U.S. LEXIS abcs aa 2015 U.S. LEXIS 45 fghhg ds fdavfd 1990 U.S. LEXIS bye bye!"
现在按照这些步骤
library(stringr)
lapply(str_extract_all(x, "(\d{4})\sU.S.\sLEXIS"), str_extract, pattern = "(\d{4})")
[[1]]
[1] "2009" "2015" "1990"
通常 "((\d{4})\sU.S.\sLEXIS)"
可以用作正则表达式模式,但我确信 R 中的嵌套组,所以在这里使用 lapply。基本上 str_extract_all(x, "(\d{4})\sU.S.\sLEXIS"
将导致 return 所有引用。试试这个。
我有一段文本在文档的某处包含对法庭案件的引用,例如
x <- "2009 U.S. LEXIS"
我知道它总是一个四位数的年份加上模式“U.S.LEXIS”前面的space。我应该如何提取这四位年份?
谢谢
你可以试试:
x <- "2009 U.S. LEXIS"
as.numeric(sub('.*?(\d{4}) U.S. LEXIS', '\1', x))
#[1] 2009
使用stringr::str_extract
:
as.numeric(stringr::str_extract(x, '\d{4}(?= U.S. LEXIS)'))
我们可以使用 parse_number
来自 readr
library(readr)
parse_number(x)
#[1] 2009
数据
x <- "2009 U.S. LEXIS"
stringr库中的substr函数解决
substr(x,1,4)
如果你需要转换成数字,那么你可以return它as.numeric
as.numeric(substr(x,1,4))
我觉得你给的data/vector不足以让这里的专家解决你的问题
更新试试这个
str_extract_all(x, "\d{4}(?=\sU.S.\sLEXIS)")
[[1]]
[1] "2009" "2015" "1990"
或将这些提取为数字
lapply(str_extract_all(x, "\d{4}(?=\sU.S.\sLEXIS)"), as.numeric)
[[1]]
[1] 2009 2015 1990
旧答案 此外,我也是 regex
的新手,因此我的解决方案可能不是一个非常干净的方法。通常,您的情况是以 regex
模式搜索嵌套组。不过,你可以试试这个方法
x <- "aabv 2009 U.S. LEXIS abcs aa 2015 U.S. LEXIS 45 fghhg ds fdavfd 1990 U.S. LEXIS bye bye!"
> x
[1] "aabv 2009 U.S. LEXIS abcs aa 2015 U.S. LEXIS 45 fghhg ds fdavfd 1990 U.S. LEXIS bye bye!"
现在按照这些步骤
library(stringr)
lapply(str_extract_all(x, "(\d{4})\sU.S.\sLEXIS"), str_extract, pattern = "(\d{4})")
[[1]]
[1] "2009" "2015" "1990"
通常 "((\d{4})\sU.S.\sLEXIS)"
可以用作正则表达式模式,但我确信 R 中的嵌套组,所以在这里使用 lapply。基本上 str_extract_all(x, "(\d{4})\sU.S.\sLEXIS"
将导致 return 所有引用。试试这个。