首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的agrep函数

R中的agrep函数
EN

Stack Overflow用户
提问于 2011-09-29 05:27:17
回答 4查看 688关注 0票数 0

我试图将字符串"24!!07!!10“、"15!!08!!12”和"10!!08!!12“从下面的4行数据中分离出来。

代码语言:javascript
复制
> z
                                                             LEGAL
1                                                        MAP #1166
2                        SE1/4 NE1/4 24!!07!!10 EX  MAP #106 42.13
3                      MAP 15!!08!!12 N1/2NW1/4 15!!8!!12 80.00 AC
4 BEG NW COR SAID SEC THEN E208' 10!!08!!12 NW1/4 EX TR AC 158.65~

首先,如果没有max.distance选项,则agrep函数根本找不到任何匹配项。其次,选项value=TRUE似乎没有给出模式匹配的实际值,如果输出确实是行的索引,那么第一行就不应该是真正的匹配。

代码语言:javascript
复制
> pattern <-"[0-99]-[0-99]-[0-99]"
> z1<-agrep(pattern ,z,ignore.case=TRUE, value=TRUE)
> z1
character(0)

> z1<-agrep(pattern,z,ignore.case=TRUE, value=TRUE, max.distance=22)
> z1
[1] "c(2, 4, 3, 1)"

如果你能帮我弄清楚到底是怎么回事,我将不胜感激。

EN

回答 4

Stack Overflow用户

发布于 2011-09-29 06:01:51

@Kent关于您的正则表达式与您所描述的模式不匹配的说法是正确的。此外,agrep用于语言意义上的模糊匹配,不接受正则表达式。您正在寻找grep或该家族中的某个东西,可能是regexpr

给定您的数据

代码语言:javascript
复制
z <- c("MAP #1166", 
"SE1/4 NE1/4 24!!07!!10 EX  MAP #106 42.13", 
"MAP 15!!08!!12 N1/2NW1/4 15!!8!!12 80.00 AC", 
"BEG NW COR SAID SEC THEN E208' 10!!08!!12 NW1/4 EX TR AC 158.65~")

您可以找到匹配的位置并使用以下命令提取它们

代码语言:javascript
复制
pattern <- "[0-9][0-9]!![0-9][0-9]!![0-9][0-9]"
locs <- regexpr(pattern, z)
substr(z, locs, locs+attr(locs,"match.length")-1)

如果您想使用另一种形式的正则表达式,您可以。您只需对字符串文字中的反斜杠进行双重转义即可。

代码语言:javascript
复制
pattern <- "\\d{2}!!\\d{2}!!\\d{2}"
票数 2
EN

Stack Overflow用户

发布于 2011-09-29 05:43:46

不知道R,但你的模式可能不正确。

那么"\d{2}!!\d{2}!!\d{2}"或者

代码语言:javascript
复制
"[0-9][0-9]!![0-9][0-9]!![0-9][0-9]"
票数 1
EN

Stack Overflow用户

发布于 2011-09-29 06:08:22

怀疑R中的agrep不支持这种模式。无论如何,您可能应该改用grep

代码语言:javascript
复制
z1 <- grep("\\d{2}!!\\d{2}!!\\d{2}", z, value=TRUE)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7589817

复制
相关文章

相似问题

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