我正在清理一个文本,我想删除任何撇号,除了前面的撇号和后面的字母,比如:I‘s,I’s,he‘s.等等。
我有以下初步解决方案,处理许多案件,但我想要一个更好的解决方案:
rmAps <- function(x) gsub("^\'+| \'+|\'+ |[^[:alpha:]]\'+(a-z)*|\\b\'*$", " ", x)
rmAps("'i'm '' ' 'we end' '")
[1] " i'm we end "我也试过:
(?<![a-z])'(?![a-z])但我想我还是错过了某物。
发布于 2017-01-29 07:56:03
gsub("'(?!\\w)|(?<!\\w)'", "", x, perl = TRUE)
#[1] "i'm we end "删除字符后面没有单词字符的场合:'(?!\\w)。
删除字符前面没有单词字符的场合:(?<!\\w)'。
如果出现任何一种情况,您都希望将其删除,因此'(?!\\w)|(?<!\\w)'应该能做到这一点。请注意,\\w包含下划线,并根据需要进行调整。
另一个选择是
gsub("\\w'\\w(*SKIP)(*FAIL)|'", "", x, perl = TRUE)在本例中,当'被word字符:\\w'\\w包围时,您将匹配任何实例,然后强制该匹配与(*SKIP)(*FAIL)失败。但是,也要寻找使用'的|'。结果是,只有出现的'没有包装在字字符将被匹配和替代。
发布于 2017-01-28 21:55:54
您可以使用以下正则表达式:
(?<=\w)'(?=\w)(?<=)是一个积极的背景。在下一个选择器之前,内部的所有内容都需要匹配。(?=)是一个积极的展望。在前面的选择器之后,内部的所有内容都需要匹配。\w任何字母数字字符和下划线如果要限制结果,还可以将\w切换到例如[a-zA-Z]。
https://stackoverflow.com/questions/41915142
复制相似问题