从R中的regexp类中删除字符

从R中的regexp类中删除字符,regex,r,regex-negation,Regex,R,Regex Negation,编辑:更改整个问题以使其更清楚 我可以从R中的一个正则表达式类(例如[:alnum::)中删除一个字符吗 例如,匹配所有标点([:punct:)除了\字符 我正在尝试替换标记中使用的下划线以进行斜体化,但斜体化的子字符串可能包含我希望保留的单个下划线 编辑:作为另一个例子,我希望捕获下划线对之间的所有内容(注意,一对包含一个下划线,我希望保持在1到10之间) 您可能不会相信,但仅通过就可以实现?在这里起到了预期的作用: str <- 'This is a _string with_ som

编辑:更改整个问题以使其更清楚

我可以从R中的一个正则表达式类(例如
[:alnum::
)中删除一个字符吗

例如,匹配所有标点(
[:punct:
)除了
\
字符

我正在尝试替换标记中使用的下划线以进行斜体化,但斜体化的子字符串可能包含我希望保留的单个下划线

编辑:作为另一个例子,我希望捕获下划线对之间的所有内容(注意,一对包含一个下划线,我希望保持在1到10之间)

您可能不会相信,但仅通过
就可以实现?
在这里起到了预期的作用:

str <- 'This is a _string with_ some _random underscores_ in it.'
gsub("_+([[:print:]]+?)_+", "\\1", str)
str <- 'This is a _random string with_ a scale of 1_10.'
gsub("_+([[:print:]]+?)_+", "\\1", str)
这是你的电话号码

但是如果您想修改该类,请注意它基本上是一个
[\x20-\x7E]
范围。下划线为
\x5F
,您可以轻松地将其从范围中排除,并使用
[\x20-\x5E\x60-\x7E]

str <- 'This is a _string with_ some _random underscores_ in it.'
gsub("_+([\x20-\x5E\x60-\x7E]+)_+", "\\1", str)
您可能不会相信,但仅通过
就可以实现?
在这里起到了预期的作用:

str <- 'This is a _string with_ some _random underscores_ in it.'
gsub("_+([[:print:]]+?)_+", "\\1", str)
str <- 'This is a _random string with_ a scale of 1_10.'
gsub("_+([[:print:]]+?)_+", "\\1", str)
这是你的电话号码

但是如果您想修改该类,请注意它基本上是一个
[\x20-\x7E]
范围。下划线为
\x5F
,您可以轻松地将其从范围中排除,并使用
[\x20-\x5E\x60-\x7E]

str <- 'This is a _string with_ some _random underscores_ in it.'
gsub("_+([\x20-\x5E\x60-\x7E]+)_+", "\\1", str)

与@Stribizev类似:

x <- "This is _a random_ string with _underscores: rate 1_10 please_"
gsub("\\b_(.*?)_\\b", "\\1", x, perl=T)

这里我们使用单词边界和惰性匹配。请注意,默认的regexp引擎存在惰性重复和捕获组问题,因此您可能希望使用类似于@stribizev的
perl=T

x <- "This is _a random_ string with _underscores: rate 1_10 please_"
gsub("\\b_(.*?)_\\b", "\\1", x, perl=T)
gsub('(?<=\\D)\\_(?=\\D|$)','',str,perl=T)

这里我们使用单词边界和惰性匹配。请注意,默认的regexp引擎在惰性重复和捕获组方面存在问题,因此您可能希望使用
perl=T

gsub(')(?
gsub('))(?请帮助我们提供更多信息,并指定要保留的下划线的位置、时间、地点等。如果R支持负数Posix类,您可以使用负数,如
[^[:^alnum:]a]
但我认为负Posix类是一个Perl扩展。也许值得一试。或者,您可以执行
[:alnum:](?基本上,底线是如果没有解析整个表单的外部提示的帮助,您将无法区分开始下划线和结束下划线。请帮助我们提供更多信息,并指定要保留的下划线的位置或出现时间或地点等。如果R支持负数Posix类你可以用一个负数,比如
[^[:^alnum:]a]
但是我认为负数Posix类是一个Perl扩展。也许值得一试。或者,你也可以用
[[:alnum:](?基本上,底线是如果没有解析整个表单的外部提示的帮助,您将无法区分开始下划线和结束下划线。如果您仍然需要任何帮助,请发表评论。编程时祝您好运:)如果您仍然需要任何帮助,请发表评论。编程时祝您好运:)
gsub('(?<=\\D)\\_(?=\\D|$)','',str,perl=T)