下面是示例t <- 'Hui Wan (Shanghai Maritime University); Mingqiang Xu (Shanghai Chart Center, Donghai Navigation Safety Administration of MOT)*; Yingjie Xiao ( Shanghai Maritime University)',我希望输出是'()*‘中的信息,在这个示例中是Shanghai Chart Center, Donghai Navigation Safety Administration of MOT
发布于 2021-03-03 11:49:18
为了只匹配(…)*的内容,棘手的部分是避免匹配两个不相关的括号组(例如,类似于(…) … (…)*)。要做到这一点,最简单的方法是不允许在匹配中使用括号:
stringr::str_match_all(t, r'{\(([^)]*)\)\*}')请注意,对于嵌套括号(( … ( … ) …)*),这将失败。正则表达式根本不适合解析嵌套内容,因此如果需要处理这种情况,正则表达式不是合适的工具;您需要使用上下文无关解析器(这要复杂得多)。
发布于 2021-03-03 11:49:35
定义以(开头的模式,后面跟着除(或)(表示为负字符类[^)(]+)之外的任何字符,并由)*关闭。
library(stringr)
str_extract_all(t, "\\([^)(]+\\)\\*")
[[1]]
[1] "(Shanghai Chart Center, Donghai Navigation Safety Administration of MOT)*"您可以使用unlist()消除列表结构
https://stackoverflow.com/questions/66455770
复制相似问题