R 替换单引号而不更改撇号

R 替换单引号而不更改撇号,r,regex,stringr,R,Regex,Stringr,我有一个带有列标题的数据框,我想在不更改撇号的情况下将单引号替换为双引号。例如,“我明天不上班”。应该是“我明天不上班” 我试着这样做: gsub("(\\w'\\w+) |, ", "\\1", "I don't go to work tomorrow") 我尝试了几种方法,但没有得到预期的结果。 我在stringr中尝试了str\u replace\u all(),但是它将所有的“into”都替换掉了。每一条建议都会得到赞赏。我认为你的规则可能很简单:如果撇号前后有某个东西(非空格),那么

我有一个带有列标题的数据框,我想在不更改撇号的情况下将单引号替换为双引号。例如,“我明天不上班”。应该是“我明天不上班”

我试着这样做:

gsub("(\\w'\\w+) |, ", "\\1", "I don't go to work tomorrow")
我尝试了几种方法,但没有得到预期的结果。
我在
stringr
中尝试了
str\u replace\u all()
,但是它将所有的“into”都替换掉了。每一条建议都会得到赞赏。

我认为你的规则可能很简单:如果撇号前后有某个东西(非空格),那么不要替换它;否则,替换它


gsub(“^”|)(?我认为你的规则可能很简单:如果撇号前后有某个东西(非空格),那么不要替换它;否则,替换它


gsub(“^”|)(?模式

要仅在字符串的开始/结束处匹配撇号,请执行以下操作:

^'|'$

如果只在一个词之外搜索这个使徒,你可以使用

\b'\b(*SKIP)(*FAIL)|'
请参阅。此处,仅当两端未用字母、数字或下划线括起时,
才匹配,因为所有用单词字符括起的
都被跳过/失败

如果仅当
不在两个字母之间时才需要匹配
,请使用

'(?!(?<=[A-Za-z]')[A-Za-z])    # ASCII only
'(?!(?<=\p{L}')\p{L})          # Any Unicode letters

”(?!(?模式

要仅在字符串的开始/结束处匹配撇号,请执行以下操作:

^'|'$

如果只在一个词之外搜索这个使徒,你可以使用

\b'\b(*SKIP)(*FAIL)|'
请参阅。此处,仅当两端未用字母、数字或下划线括起时,
才匹配,因为所有用单词字符括起的
都被跳过/失败

如果仅当
不在两个字母之间时才需要匹配
,请使用

'(?!(?<=[A-Za-z]')[A-Za-z])    # ASCII only
'(?!(?<=\p{L}')\p{L})          # Any Unicode letters


(?!(?这很管用,但不确定你想如何概括:
gsub(“go to\\s”,“gsub”(^’|“$,”,“我明天不上班”)
(很高兴看到如何在一个正则表达式中实现这一点)。@NelsonGon我刚刚解决了我的问题。我想替换“我明天不上班”=>“我明天不上班”“。我想在不更改撇号的情况下将单引号替换为双引号。可能是
str_replace_all(“‘我明天不上班’”,“^’|“$”,“”)
?@Phil你做得很简单,但我花了好几个小时才找到。大拇指正则表达式真的很难,我也一直在努力,遇到这种墙是很正常的。这很管用,但不确定你想如何概括:
gsub(“转到\\s”,“gsub”(^'.'$,“,”,“我明天不上班”)
。(很高兴能在一个正则表达式中实现这一点)。@NelsonGon我刚刚解决了我的问题。我想替换“我明天不上班”=>“我明天不上班”。我想在不更改撇号的情况下将单引号替换为双引号。也许
str_replace_all(“‘我明天不上班’”)、“^’、“$”、“)
?@Phil你做得很简单,但我花了好几个小时才找到。大拇指正则表达式真的很难,我也一直在努力解决这个问题,遇到这种墙是很正常的。太好了!这就是我想做的。非常感谢你!这个规则在所有格复数的情况下会失败(如果OP的数据中存在的话)@H1很好…现在我们进入了更多的NLP,因为我知道这是在英语中,但不知道其他语言是否有类似的角格。我不知道如何正确地捕捉所有格复数而不出现假否定…)太好了!这正是我想做的。非常感谢!对于所有格复数(如果OP的数据中存在任何所有格复数),此规则将失败@H1很好…现在我们进入了更多的NLP,因为我知道这是英文的,但不知道其他语言是否有类似的角格。我不知道如何正确地捕捉所有格复数而没有假否定…)好的模式,要记住的东西:)真的很好!好的模式,要记住的东西:)真是太好了!