首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中的正则表达式:带有{}的模式重复

R中的正则表达式:带有{}的模式重复
EN

Stack Overflow用户
提问于 2013-03-20 22:33:45
回答 3查看 573关注 0票数 1

我在使用R中的正则表达式时遇到了问题。我的目标是在R中解析Markdown/reST/knitr报告文本文件,以删除我自己的自定义注释。这些评论的格式如下:

代码语言:javascript
运行
复制
Some sentence is about something <find a citation to this>.

因为Markdown对HTML标签使用<>,所以我需要删除这些注释(使用我的自定义函数)以避免混淆。在我这样做之后,句子采用以下形式:

代码语言:javascript
运行
复制
Some sentence is about something .

注意最后一个单词和点之间的空格。删除它很容易,但是文本可能包含以..开头的包含R代码( reST )的..注释:

代码语言:javascript
运行
复制
.. {r chunk-name}
.. some R code 
.. ..

所以基本上我需要替换“.”在前一种情况下,但在后一种情况下不是。我想我可以使用R regexp原子的重复修饰符来实现:

代码语言:javascript
运行
复制
gsub(pattern=" \\.{1}",replacement=".",x="Something ..")
[1] "Something.."

我原以为这个表达式会匹配一个空格,后面跟着一个(但不是更多)点。但是,无论是一个点还是两个点,字符串都会被替换。我是一个真正的新手,所以可能遗漏了一些明显的东西。即使这样,任何帮助都会非常感谢。

向您致敬,Maxim

EN

Stack Overflow用户

发布于 2013-03-22 01:29:31

您可以使用Perl正则表达式中的负先行模式来实现您想要的结果。这基本上是说要匹配模式,但只有在没有这个模式的情况下才会这样。一个简单的例子:

代码语言:javascript
运行
复制
> gsub(pattern=" \\.(?!\\.)",replacement=".",x="Something .", perl=TRUE)
[1] "Something."
> gsub(pattern=" \\.(?!\\.)",replacement=".",x="Something ..", perl=TRUE)
[1] "Something .."
票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15526497

复制
相关文章

相似问题

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