我想用特定的字串替換括號之間的 70,比如“80”。
從過濾器[70.00-100.00] --> 過濾器[80.00-100.00]
但是,當使用以下代碼時:
str_replace('filter [70.00-140.00]'," *\\[.*?\\. *",'80')
輸出是:
filter8000-140.00]
有什么辦法可以替換 \ 和 . (在本例中為 70)而不洗掉 \ 和 。?
uj5u.com熱心網友回復:
[使用后替換任何一位或多位數字
library(stringr)
str_replace('filter [70.00-140.00]','(?<=\\[)\\d ', '80')
sub('\\[\\d ', '[80', 'filter [70.00-140.00]')
sub('(?<=\\[)\\d ', '80', 'filter [70.00-140.00]', perl=TRUE)
請參閱在線 R 演示。該(?<=\[)\d 相匹配的位置,立即前面有[,然后一個或多個數字。\[\d 匹配[和一位或多位數字,因此[必須恢復并因此添加到替換模式中。
要準確替換70,您可以使用
library(stringr)
str_replace('filter [70.00-140.00]',"(\\[[^\\]\\[]*)70",'\\180')
# => [1] "filter [80.00-140.00]"
sub('(\\[[^][]*)70','\\180', 'filter [70.00-140.00]')
# => [1] "filter [80.00-140.00]"
請參閱正則運算式演示。詳情:
(\[[^\]\[]*)- 第 1 組:[,然后是零個或多個字符,而不是[和]70- 一個70字串。
在替換中,\1插入 Group 1 值。
另一種解決方案可能是將70方括號內以單詞邊界結尾且前面不帶有數字或數字 .(即,僅70作為數字的整個整數部分匹配)的所有字串替換為
str_replace_all(
'filter [70.00-140.00]',
'\\[[^\\]\\[]*]',
function(x) gsub('(?<!\\d|\\d\\.)70\\b', '80', x, perl=TRUE))
# => [1] "filter [80.00-140.00]"
在這里,\[[^\]\[]*]匹配兩個方括號之間沒有其他方括號的gsub('(?<!\\d|\\d\\.)70\\b', '80', x, perl=TRUE)字串,并且僅在這些匹配的子字串上運行。的(?<!\d|\d\.)70\b匹配任何70未與之前的數字或數字 .和不跟另一個字字符(字母,數字或_,或連接器標點,因為ICU正則運算式也支持Unicode默認情況下)。
uj5u.com熱心網友回復:
你可以用這個。它將替換 [ 和 之間的所有數字。:
preg_replace('/(?<=\[)(\d*)(?=\.)/', '80', 'filter [70.00-140.00]');
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/343661.html
上一篇:將字串轉換為R中的串列
