[英]Search & Replace multiple occurence of pattern in a string after enclosing it between [ and ]
將字符串中的模式用"["
前綴和"]"
"AxxB"
嘗試搜索和替換長字符串(其中"x"
可以是任何單詞字符)中多次出現的模式,例如"AxB"
或"AxxB"
例如"[AxB]"
或"[AxxB]"
,如下面的示例所示。
在A和B之間可以出現任何單詞字符以及任何數量的單詞字符。 我只能找到模式,但不知道如何通過使用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.