R语言如何提取文本中不在允许字符集内的错误编码字符?
R语言正则匹配提取转录文本非法字符修正方案
问题根源
你的代码存在3个核心逻辑错误:
- 正则字符集写法错误:误将所有允许字符拆分到两个独立的
[]字符组中,变成匹配「第一个字符是()/中的一个、第二个字符是字母数字等字符」的连续双字符序列,完全不符合单字符匹配的需求 - 过滤逻辑写反:
filter中加了!取反,变成筛选无非法字符的行,和需求正好相反 - 缺少空格适配:合法转录文本包含空格,需要将空格加入允许字符集,且提取结果需要把列表格式转为逗号分隔的字符串
修正后代码
library(dplyr) library(stringr) # 测试数据 df <- data.frame( Utterance = c("~°maybe you (.) >should ¥just¥<", "SOME text |<-- pipe¿ and€", "blah%", "text ^more text", "£norm(hh)a::l£mal, (1.22)")) # 非法字符匹配规则:^在字符组开头表示取反,匹配所有不在允许集合内的单字符 illegal_pattern <- "[^()/A-Za-z0-9↑↓£¥°!.,:¿?~<>≈=_\\s-]" df %>% # 筛选存在非法字符的行 filter(str_detect(Utterance, illegal_pattern)) %>% # 提取所有非法字符,转为逗号分隔字符串 mutate(WrongChar = sapply(str_extract_all(Utterance, illegal_pattern), toString))
输出结果
Utterance WrongChar 1 SOME text |<-- pipe¿ and€ |, € 2 blah% % 3 text ^more text ^
和你预期的输出完全一致。
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

