【问题标题】:How to extract text inside the brackets in R?如何提取R中括号内的文本?
【发布时间】:2019-02-23 11:45:49
【问题描述】:

如何提取包含姓名和年份的所有括号?

string="testo(antonio.2018).testo(antonio).testo(giovanni,2018).testo(2018),testo(libero 2019)"

所需的输出如下所示:

"(antonio.2018)" "(giovanni,2018)" "(libero 2019)"

我不想提取 (2018) 和 (antonio)

【问题讨论】:

标签: r regex


【解决方案1】:

您可以将stringr 包中的str_extract_all 与此正则表达式模式一起使用:

stringr::str_extract_all(string, 
                         "\\(\\w+([[:punct:]]{1}|[[:blank:]]{1})[[:digit:]]+\\)")

# [[1]]
# [1] "(antonio.2018)"  "(giovanni,2018)" "(libero 2019)"  

正则表达式的小描述:

\\w 将匹配任何单词字符
+ 意味着它必须至少匹配一次
[[:punct:]] 将匹配任何标点字符
{1} 将恰好出现一次(....|....) 表示一种模式或必须满足另一种模式
[[:blank:]] 表示必须出现任何空格
[[:digit:]] 表示必须出现任何数字
\\( 必须退出大括号。

【讨论】:

    【解决方案2】:

    @lok​​i 的回答很棒!你也可以试试这个,希望对你有用:)

    x<-regmatches(string, gregexpr("(?=\\().*?(?<=\\))", string, perl=T))[[1]]
    
    >x
    
    [1] "(antonio.2018)"  "(antonio)"       "(giovanni,2018)" "(2018)"          "(libero 2019)"  
    
    #Extract every nth value. 
    >x[seq_along(x) %% 2 > 0]
    [1] "(antonio.2018)"  "(giovanni,2018)" "(libero 2019)"  
    

    注意:不确定您的完整数据集(即结构是否始终为第 n 格式。如果是(每第二个值),这将适用于大规模。

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 2020-09-14
      • 2010-09-27
      • 2014-09-05
      • 1970-01-01
      • 2019-03-11
      • 2015-11-11
      • 2012-01-26
      • 2010-09-16
      相关资源
      最近更新 更多