R语言中如何在字符列表中查找指定模式位置并排除
解决R语言中匹配词性标注里
$.和$,的问题 嘿,我来帮你搞定这个小麻烦!你遇到的问题其实是正则表达式里特殊字符的坑——在正则里,$是个特殊元字符,用来匹配字符串的结尾,所以你直接写grep("$.", test$POStags)的时候,R会理解成“找所有以.结尾的字符串”,而不是你想要的字面$.符号,这就是为什么返回character(0)啦。
给你两个简单的解决办法:
方法1:转义特殊字符(正则模式)
如果你想用正则表达式同时匹配两种符号,需要把$和.都转义(因为.在正则里也是特殊字符,匹配任意单个字符),在R的字符串里要写双反斜杠\\来转义:
# 同时匹配`$,`和`$.`的位置 match_positions <- grep("\\$(,|\\.)", test$POStags)
这个模式的意思是:匹配$后面跟着逗号或者点号的字符串,直接返回它们的索引位置。
方法2:字面匹配(更适合新手)
如果你只是想精确匹配字面的$.和$,,直接给grep加fixed=TRUE参数,告诉它不要解析正则规则,直接按字面内容匹配:
# 匹配`$.`的位置 dot_pos <- grep("$.", test$POStags, fixed=TRUE) # 匹配`$,`的位置 comma_pos <- grep("$,", test$POStags, fixed=TRUE) # 合并所有目标位置 all_positions <- c(dot_pos, comma_pos)
这种方式完全不用考虑正则特殊字符的干扰,非常直观好懂。
另外要注意:如果你想要位置的话,不要加value=TRUE——这个参数是返回匹配到的元素值,而默认的grep就会返回匹配元素的索引位置,正好是你需要用来后续排除的位置。
用你的数据测试的话,运行后all_positions应该会返回6和12,对应$,和$.在列表里的位置~
内容的提问来源于stack exchange,提问作者Giess
相关产品推荐
相关产品推荐

