我试图使用子函数将包号与杂乱的字符串变量隔离开来。包号在字符串中由前面的"ParNum:“标识,所需数字周围的字符各不相同,但它们遵循这两个示例的一般形式。
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"悲惨的失败的努力:
> sub("[^:]*:)*[^:]*:", "", string1)
[1] "0511552031 ParNum:0511552031 CC:05 T:7 R:8"预期结果:
0511552031发布于 2017-12-01 05:37:39
尝试在sub中使用以下模式
.*ParNum:([^[:blank:]]*).*这与ParNum:匹配,然后捕获ParNum:后面的任何非空格/制表符字符。然后,捕获的数字在第一个捕获组中以\\1的形式可用。
代码片段:
string1 <- "Legal Description: PrpId:0511552031 ParNum:0511552031 CC:05 T:7 R:8"
sub(".*ParNum:([^[:blank:]]*).*", "\\1", string1)
[1] "0511552031"
演示
发布于 2017-12-01 06:05:17
我发现使用来自tidyverse的tidyverse包更容易做到这一点。(事实上,像这样的问题促使我第一次安装stringr)
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_extract和sub也是矢量化的,所以下面的工作
strings <- c(string1, string2)
str_extract(strings, "(?<=ParNum:)[^[:blank:]]*")
# [1] "0511552031" "0511552031"
sub(".*ParNum:([^[:blank:]]*).*", "\\1", strings)
# [1] "0511552031" "0511552031"模式(?<=)是用于查找的正则表达式。这个站点有更多关于旁观者的信息。
https://stackoverflow.com/questions/47587210
复制相似问题