繁体   English   中英

如何在R gsub中返回匹配的正则表达式

[英]How to return matched regex in R gsub

这是非常基本的,但是我似乎找不到如何在R中的正则表达式中返回已经匹配的表达式。

例如,假设我想在首字母之后添加一个句点,例如将"Joe J Smith"更改为"Joe J. Smith"

我的方法是使用gsub("(?<=\\\\s|^)[AZ](?=\\\\S|$)","\\\\1.",string,perl=T) (我不是正则表达式方面的专家,但我认为\\\\1$1将返回匹配的表达式,即给定的字符串为"J"

但是,由于没有,所以返回: "Joe . Smith"

我敢肯定这很简单,但是我找不到任何尝试在R中做类似事情的示例,R具有自己的基础正则表达式品牌。

在这种情况下,可以使用"\\\\b"来指代单词边界:

> gsub("\\b([A-Z])\\b", "\\1.", "Joe J Smith")
[1] "Joe J. Smith"

关于连字符后的大写字母:

> gsub("(-.)", "\\U\\1", "Joe Jones-smith", perl = TRUE)
[1] "Joe Jones-Smith"

如akrun所示,您需要在大写字母上加上括号以组成一个组。 ?regex是这样的:

     The backreference '\N', where 'N = 1 ... 9', matches the substring
     previously matched by the Nth parenthesized subexpression of the
     regular expression.  (This is an extension for extended regular
     expressions: POSIX defines them only for basic ones.)

添加括号给出以下示例:

R>x
[1] "joe J smith"
R>gsub("(?<=\\s|^)([A-Z])(?=\\s|$)","\\1.",x,perl=TRUE)
[1] "joe J. smith"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM