簡體   English   中英

將模式括在[和]之間之后,搜索並替換模式中字符串中多次出現的情況

[英]Search & Replace multiple occurence of pattern in a string after enclosing it between [ and ]

將字符串中的模式用"["前綴和"]" "AxxB"嘗試搜索和替換長字符串(其中"x"可以是任何單詞字符)中多次出現的模式,例如"AxB""AxxB"例如"[AxB]""[AxxB]" ,如下面的示例所示。

AB之間可以出現任何單詞字符以及任何數量的單詞字符。 我只能找到模式,但不知道如何通過使用gsub()和可能的paste()函數在模式中添加前綴和后綴來替換它。 有沒有辦法做到這一點?

轉換以下字符串:

"CCBCACBAHGABGGARBJDFDFADFDFBFDFD""CCBC[ACB]AHG[AB]GG[ARB]JDFDF[ADFDFB]FDFD"

使用gsub來匹配A然后匹配最少數量的其他字符,直到我們到達B為止,這些其他字符不是A 用方括號括起來的火柴代替火柴。 在下面, x是輸入字符串(如在問題中所述,並在結尾處的注解中重復),但它可能是此類字符串的字符向量,例如c(x, x) ,它仍然可以工作。 不使用任何軟件包。

gsub("(A[^A]*?B)", "[\\1]", x)
## [1] "CCBC[ACB]AHG[AB]GG[ARB]JDFDF[ADFDFB]FDFD"

注意:

x <- "CCBCACBAHGABGGARBJDFDFADFDFBFDFD"
txt <- "CCBCACBAHGABGGARBJDFDFADFDFBFDFD"
expected <- "CCBC[ACB]AHG[AB]GG[ARB]JDFDF[ADFDFB]FDFD"

# Find matches.
matches <- regmatches(txt, gregexpr("(?=A).*?(?<=B)", txt, perl=TRUE))[[1]]
matches <- matches[matches != ""]

# Iterate through and make replacements.
for(match in matches){
  txt <- gsub(match, paste0("\\[", match, "\\]"), txt)
}

txt == expected # TRUE

我敢肯定有更好的方法來做gsub部分。

使用stringr軟件包(可以使用gsub來完成類似的操作:

library(stringr)
string <- "CCBCACBAHGABGGARBJDFDFADFDFBFDFD"
str_replace_all(string, pattern = "(A.*?B)", "[\\1]")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM