簡體   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