首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R正则表达式除去撇号,除了前面的撇号和后面的字母

R正则表达式除去撇号,除了前面的撇号和后面的字母
EN

Stack Overflow用户
提问于 2017-01-28 21:41:11
回答 2查看 295关注 0票数 1

我正在清理一个文本,我想删除任何撇号,除了前面的撇号和后面的字母,比如:I‘s,I’s,he‘s.等等。

我有以下初步解决方案,处理许多案件,但我想要一个更好的解决方案:

代码语言:javascript
复制
rmAps <- function(x) gsub("^\'+| \'+|\'+ |[^[:alpha:]]\'+(a-z)*|\\b\'*$", " ", x)

rmAps("'i'm '' ' 'we end' '")
[1] " i'm   we end  "

我也试过:

代码语言:javascript
复制
(?<![a-z])'(?![a-z])

但我想我还是错过了某物。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-29 07:56:03

代码语言:javascript
复制
gsub("'(?!\\w)|(?<!\\w)'", "", x, perl = TRUE)
#[1] "i'm   we end "

删除字符后面没有单词字符的场合:'(?!\\w)

删除字符前面没有单词字符的场合:(?<!\\w)'

如果出现任何一种情况,您都希望将其删除,因此'(?!\\w)|(?<!\\w)'应该能做到这一点。请注意,\\w包含下划线,并根据需要进行调整。

另一个选择是

代码语言:javascript
复制
gsub("\\w'\\w(*SKIP)(*FAIL)|'", "", x, perl = TRUE)

在本例中,当'被word字符:\\w'\\w包围时,您将匹配任何实例,然后强制该匹配与(*SKIP)(*FAIL)失败。但是,也要寻找使用'|'。结果是,只有出现的'没有包装在字字符将被匹配和替代。

票数 2
EN

Stack Overflow用户

发布于 2017-01-28 21:55:54

您可以使用以下正则表达式:

代码语言:javascript
复制
(?<=\w)'(?=\w)
  • (?<=)是一个积极的背景。在下一个选择器之前,内部的所有内容都需要匹配。
  • (?=)是一个积极的展望。在前面的选择器之后,内部的所有内容都需要匹配。
  • \w任何字母数字字符和下划线

如果要限制结果,还可以将\w切换到例如[a-zA-Z]

for live testing.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41915142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档