首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用常见的前一模式从字符串中提取字符?

如何使用常见的前一模式从字符串中提取字符?
EN

Stack Overflow用户
提问于 2017-12-01 05:32:25
回答 2查看 40关注 0票数 2

我试图使用子函数将包号与杂乱的字符串变量隔离开来。包号在字符串中由前面的"ParNum:“标识,所需数字周围的字符各不相同,但它们遵循这两个示例的一般形式。

代码语言:javascript
复制
string1 <- "Legal Description:  PrpId:0511552031 ParNum:0511552031 CC:05 T:7 R:8"
string2 <- "Legal Description:  Rmrk:PT OF PrpId:0511552031 ParNum:0511552031 CC:05 T:7 R:8"

悲惨的失败的努力:

代码语言:javascript
复制
> sub("[^:]*:)*[^:]*:", "", string1)
[1] "0511552031 ParNum:0511552031 CC:05 T:7 R:8"

预期结果:

代码语言:javascript
复制
0511552031
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-01 05:37:39

尝试在sub中使用以下模式

代码语言:javascript
复制
.*ParNum:([^[:blank:]]*).*

这与ParNum:匹配,然后捕获ParNum:后面的任何非空格/制表符字符。然后,捕获的数字在第一个捕获组中以\\1的形式可用。

代码片段:

代码语言:javascript
复制
string1 <- "Legal Description:  PrpId:0511552031 ParNum:0511552031 CC:05 T:7 R:8"
sub(".*ParNum:([^[:blank:]]*).*", "\\1", string1)
[1] "0511552031"

演示

票数 4
EN

Stack Overflow用户

发布于 2017-12-01 06:05:17

我发现使用来自tidyversetidyverse包更容易做到这一点。(事实上,像这样的问题促使我第一次安装stringr)

代码语言:javascript
复制
library(stringr)

string1 <- "Legal Description:  PrpId:0511552031 ParNum:0511552031 CC:05 T:7 R:8"
string2 <- "Legal Description:  Rmrk:PT OF PrpId:0511552031 ParNum:0511552031 CC:05 T:7 R:8"

str_extract(string1, "(?<=ParNum:)[^[:blank:]]*")
# [1] "0511552031"

另外,str_extractsub也是矢量化的,所以下面的工作

代码语言:javascript
复制
strings <- c(string1, string2)
str_extract(strings, "(?<=ParNum:)[^[:blank:]]*")
# [1] "0511552031" "0511552031"
sub(".*ParNum:([^[:blank:]]*).*", "\\1", strings)
# [1] "0511552031" "0511552031"

模式(?<=)是用于查找的正则表达式。这个站点有更多关于旁观者的信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47587210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档