在R中提取以标点符号开头和结尾的文本[重复]

Posted

技术标签:

【中文标题】在R中提取以标点符号开头和结尾的文本[重复]【英文标题】:Extract Text Starting and Ending with Punctuations in R [duplicate] 【发布时间】:2019-08-21 03:56:09 【问题描述】:

我想使用 RStudio 提取两个标点符号之间的一组字符串。

我尝试使用 str_extract 命令,但每当我尝试使用锚点(^ 用于开始字符,$ 用于结束字符)时,它都失败了。

这里是示例问题:

> text <- "Name : Dr. CHARLES DOWNING MAP ; POB : London; Age/DOB : 53 years / August 05, 1958;"

这是我使用的示例代码:

> str_extract(text,"(Name : )(.+)?( ;)")  
> str_match(str_extract(text,"(Name : )(.+)?( ;)"),"(Name : )(.+)?( ;)")[3]

但它似乎过于冗长,而且不够灵活。

我只想提取"Dr. CHARLES DOWNING MAP"

任何人都可以帮助解决我的问题吗?

我可以告诉正则表达式在“Name :”之后以任何非空白字符开头并在“;POB”之前结束吗?

【问题讨论】:

【参考方案1】:

这似乎行得通。

> gsub(".*Name :(.*) ;.*", "\\1", text)
[1] " Dr. CHARLES DOWNING MAP"

【讨论】:

就打我吧。我的冒号后面有\\s+【参考方案2】:

str_match

stringr::str_match(text, "^Name : (.*) ;")[, 2]
#[1] "Dr. CHARLES DOWNING MAP"

[, 2]是从捕获组中获取内容。


还有qdapRegex::ex_between提取左右标记之间的字符串

qdapRegex::ex_between(text, "Name : ", ";")[[1]]
#[1] "Dr. CHARLES DOWNING MAP"

【讨论】:

以上是关于在R中提取以标点符号开头和结尾的文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章

R 正则表达式替换除句子标记、撇号和连字符以外的所有标点符号

去除文本中标点符号的java程序

提取以相同的两个字符开头并以数字字符结尾的文本

猪中的正则表达式匹配

python怎么样提取字符到列表?

正则基础