查找并替换矩阵中的文本

时间:2014-01-15 12:46:04

标签: regex string r replace gsub

我的字符矩阵中包含遵循以下常规格式的值:A/-A/BI/A/A/,{{1 }},/A-/BA/B/C

我需要清理这个数据集,这样剩下的就是格式为A/-/C的值,换句话说,两个单字符用正斜杠分隔。包含A/B-,多个正斜杠,没有字母的单个正斜杠或只有一个字母的单个正斜杠的任何内容都必须替换为空格“”。

我尝试过多次I迭代,用“”替换任何不符合正确格式的值。

这是我发现的最接近我的,但它只删除包含gsub()-,多个正斜杠和一个正斜杠(没有周围字母)的值。保留的数据格式为I(我要保留的格式),A/BA/(其他需要替换的格式):

/B

也许我应该用不同的方式写这个,而不用 data.matrix = as.matrix(data) data.matrix.clean = gsub("/./|^/.|./$|^/$|-|I", "", data.matrix) 分隔我的每个独立标准?根据我的阅读,|表示字符串的开头,^表示字符串的结尾。它似乎适用于$案例,但不适用于^/$^/.案例,我不确定原因。

在我尝试新的东西之后,我会检查所有包含值的正斜杠的格式,使用此代码似乎工作正常。

./$

任何有助于更好地理解slash = grep("/", data.matrix.clean) slash.t = data.matrix.clean[slash] table(slash.t) 内可以使用的符号以使其正常工作的帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:3)

只需使用grepl并替换其余部分:

conforming = grepl('^(?!I)\\w/(?!I)\\w$', matrix, perl = TRUE)
matrix[! conforming] = ""

字面意思是:

字符串以字符开头(I除外),后跟斜杠和字符(I除外)并在那里结束。

答案 1 :(得分:2)

您需要量词*任意数量的)来替换整个字符串:

data.matrix <- matrix(c("A/-", "A/B", "I/A", "/", "A/", "/A", 
                        "-/B", "A/B/C", "A/-/C"), ncol = 3)

     [,1]  [,2] [,3]   
[1,] "A/-" "/"  "-/B"  
[2,] "A/B" "A/" "A/B/C"
[3,] "I/A" "/A" "A/-/C"


sub(".*/.*/.*|^/.*|.*/$|^/$|.*-.*|.*I.*", "", data.matrix)

     [,1]  [,2] [,3]
[1,] ""    ""   ""  
[2,] "A/B" ""   ""  
[3,] ""    ""   ""