繁体   English   中英

正则表达式搜索特定模式,如果找到,请替换为其他模式

[英]Regex search for specific pattern, if found, replace with something else

我目前正在尝试弄清如何使用正则表达式来清理R中的文本数据。我想知道在哪里可以找到简单的教程? 我一直在网上找东西,但是当我在regex101上尝试一些东西时,我几乎找不到匹配的东西。 如果我这样做,在R内什么也不会改变。 考虑这个例子

Before <- "ACEMOGLU, D., ROBINSON, J., (2012) WHY NATIONS FAIL, (3)"
After <- "ACEMOGLU, D., ROBINSON, J., 2012, WHY NATIONS FAIL, (3)"


> Aftergsub <- gsub("\\([\\d][\\d][\\d][\\d]\\)", "new", "ACEMOGLU, D., ROBINSON, J., (2012) WHY NATIONS FAIL, (3)")
> print(Aftergsub)
[1] "ACEMOGLU, D., ROBINSON, J., (2012) WHY NATIONS FAIL, (3)"
> 

当然,“新”应该是使“之前”看起来像“之后”的表达式。 但是根据我的模式,我什至都无法将“之前”更改为其他任何内容。

换句话说,如果前面有4位数字,如何将“)”更改为“,”? 谢谢!

您的模式不起作用,因为TRE regex风味不支持方括号表达式内的速记字符类。 您应该使用[[:digit:]][0-9] ,但不要使用[\\\\d] (实际上\\或字母d匹配 )。

您可以使用

Before <- "ACEMOGLU, D., ROBINSON, J., (2012) WHY NATIONS FAIL, (3)"
gsub("\\((\\d{4})\\)", "\\1,", Before)
## => [1] "ACEMOGLU, D., ROBINSON, J., 2012, WHY NATIONS FAIL, (3)"

观看R在线演示

注意 ,我使用的\\\\d周围没有方括号(=括号表达式)。 TRE regex引擎将"\\\\d{4}"视为四位数的匹配模式。 它等于[0-9]{4}[[:digit:]]{4}

细节

  • \\\\( -文字(
  • (\\\\d{4}) -组1:任意四位数字
  • \\\\) -文字)
  • \\\\1对组1值的反向引用

暂无
暂无

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

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