【问题标题】:How to extract a fixed number of characters before a string in R如何在R中的字符串之前提取固定数量的字符
【发布时间】:2020-12-19 04:48:47
【问题描述】:

我的文本在文档中的某处包含对法庭案件的引用,例如

x <- "2009 U.S. LEXIS"

我知道它总是四位数的年份加上“U.S. LEXIS”模式前面的空格。我应该如何提取这四位数的年份?

谢谢

【问题讨论】:

  • 您要先搜索此引文,然后提取年份吗?
  • 是的,完全正确。我一开始没有沟通清楚。整个引文都埋在一个长文档中,我需要先找到它。最好我可以一次提取全部内容。整个引文就像“1947 U.S. LEXIS 2905”。它总是跟在一个“;”之后并在“*”之前。 “LEXIS”之后可能并不总是有四位数字
  • 所以请给我们一些示例数据/文本,或者至少请告诉我们所有数据/文本是否已被解析为列/行?
  • 试试我提出的方法。
  • 谢谢大家!

标签: r regex stringr


【解决方案1】:

我认为您提供的数据/向量不足以让这里的专家解决您的问题。

更新试试这个

str_extract_all(x, "\\d{4}(?=\\sU.S.\\sLEXIS)")

[[1]]
[1] "2009" "2015" "1990"

OR 将这些提取为数字

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" 将导致返回所有引用。试试这个。

【讨论】:

  • 很高兴能帮上忙。如果它达到了 SO 通常期望的目的,请接受答案并投票。
【解决方案2】:

你可以试试:

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)'))

【讨论】:

    【解决方案3】:

    我们可以从readr使用parse_number

    library(readr)
    parse_number(x)
    #[1] 2009
    

    数据

    x <- "2009 U.S. LEXIS"
    

    【讨论】:

      【解决方案4】:

      stringr 库中的 substr 函数解决它

      substr(x,1,4)
      

      如果你需要转换成数字,那么你可以将它作为.numeric返回

      as.numeric(substr(x,1,4))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        • 2021-12-24
        • 1970-01-01
        相关资源
        最近更新 更多