首页 > 解决方案 > 提取括号内的字符

问题描述

我有从 .csv 文件导入的数据。第一列包含包含括号内的文本的字符串。数据如下:

    symbol
    ___________________________________________
1 | Apollo Senior Floating Rate Fund Inc. (AFT)
2 | Apollo Tactical Income Fund Inc. (AIF)
3 | Altra Industrial Motion Corp. (AIMC)
4 | Allegion plc (ALLE) 
5 | Amphenol Corporation (APH)
6 | Ares Management Corporation (ARES)
7 | ARMOUR Residential REIT, Inc. (ARR)
8 | Banc of California, Inc. (BANC)
9 | BlackRock Resources (BCX)
10| Belden Inc (BDC)
...

我需要将该列数据转换为一个列表,例如:

    symbol2
    ___________________________________________
1 | AFT
2 | AIF
3 | AIMC
4 | ALLE
5 | APH
6 | ARES
7 | ARR
8 | BANC
9 | BCX
10| BDC
...

我的最终目标是获得一个字符串,其中括号绑定的文本由“;”分隔 像这样:

"AFT;AIF;AIMC;ALLE;APH;ARES;ARR;BANC;BCX;BDC;..."

我可以做这最后一步

paste(symbol2, collapes = ";")

但我不知道如何隔离所需的文本。

我已经尝试了此处列出的所有内容(根据模式在 R 中提取子字符串),方法是将“:”替换为“(”,但无法正常工作。我试过了:

gsub("(?<=\\()[^()]*(?=\\))(*SKIP)(*F)|.", "", symbol, perl=T)

按照这里的建议(在 R 的括号中提取文本),但输出是

"c(4, 5, 2, 1, 3, 6, 7, 8, 17, 9,...)"

有什么帮助吗?

标签: rregexstringcharacterparentheses

解决方案


我们可以使用str_extractfrom提取内容stringr

library(stringr)
symbol2 <- str_extract(df$symbol, "(?<=\\().+?(?=\\))")
symbol2
#[1] "AFT"  "AIF"  "AIMC" "ALLE" "APH"  "ARES"

正则表达式取自这里

然后你可以paste把它们放在一起

paste(symbol2, collapse = ";")
#[1] "AFT;AIF;AIMC;ALLE;APH;ARES"

推荐阅读