2012-12-14 27 views
1

我有一個模式「[^ a-z] xxx yyy [^ a-z]」,我需要匹配。我可以接受模式中「xxx yyy」部分的近似匹配,但需要不變的字符類。Agrep - 不要修改字符類

上述模式發現匹配字符串,如「skxxx yyyaa」。

我已經嘗試使用 「< [^ A-Z]> XXX YYY < [^ A-Z]>」,其中<>元字符不容許的變化,但我認爲它忽略了內部<的metcharacters>。

的代碼是:

agrep("[^a-z]xxx yyy[^a-z]","skxxx yyyaa",max.distance=2,fixed=FALSE,ignore.case=TRUE) 
+1

究竟是什麼問題? – Justin

+0

我需要在L距離爲2的字符串中匹配「[^ a-z] xxx yyy [^ a-z]」。但我不希望在最終匹配中忽略字符類[^ a-z]。 – dasman

+0

恐怕我還是不明白。你能否提供比單個積極的,至少一個比賽的負面例子以及你希望看到的輸出。如果你設置了'value = TRUE',那麼'agrep'返回一個向量中匹配的索引或者匹配的實際值。 – Justin

回答

1

可以添加以下的條件,檢查該距離來源於「XXX YYY」片,而不是從周圍[^ A-Z]。

adist("[^a-z]xxx yyy[^a-z]","sk-xxx yyz-aa",fixed=FALSE,ignore.case=TRUE) == 
    adist("xxx yyy","sk-xxx yyz-aa",fixed=FALSE,ignore.case=TRUE) 

> TRUE 

adist("[^a-z]xxx yyy[^a-z]","sk-xxx yyzaa",fixed=FALSE,ignore.case=TRUE) == 
    adist("xxx yyy","sk-xxx yyzaa",fixed=FALSE,ignore.case=TRUE) 

> FALSE