我试图将字符串"24!!07!!10“、"15!!08!!12”和"10!!08!!12“从下面的4行数据中分离出来。
> 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似乎没有给出模式匹配的实际值,如果输出确实是行的索引,那么第一行就不应该是真正的匹配。
> 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)"如果你能帮我弄清楚到底是怎么回事,我将不胜感激。
发布于 2011-09-29 06:01:51
@Kent关于您的正则表达式与您所描述的模式不匹配的说法是正确的。此外,agrep用于语言意义上的模糊匹配,不接受正则表达式。您正在寻找grep或该家族中的某个东西,可能是regexpr。
给定您的数据
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~")您可以找到匹配的位置并使用以下命令提取它们
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)如果您想使用另一种形式的正则表达式,您可以。您只需对字符串文字中的反斜杠进行双重转义即可。
pattern <- "\\d{2}!!\\d{2}!!\\d{2}"发布于 2011-09-29 05:43:46
不知道R,但你的模式可能不正确。
那么"\d{2}!!\d{2}!!\d{2}"或者
"[0-9][0-9]!![0-9][0-9]!![0-9][0-9]"发布于 2011-09-29 06:08:22
怀疑R中的agrep不支持这种模式。无论如何,您可能应该改用grep:
z1 <- grep("\\d{2}!!\\d{2}!!\\d{2}", z, value=TRUE)https://stackoverflow.com/questions/7589817
复制相似问题