替换第一个括号和 之间的文本。无需卸下支架和

Replace text between first bracket and . without removing the bracket and

我想用一个特定的字符串替换方括号之间的 70,比如“80”。

来自过滤器[70.00-100.00] --> 过滤器[80.00-100.00]

但是当使用下面的代码时:

str_replace('filter [70.00-140.00]'," *\[.*?\. *",'80')

输出为:

filter8000-140.00]

有什么办法可以替换\和.之间的字符串吗? (在本例中为 70)而不删除 \ 和 。 ?

要替换 [ 之后的任何一位或多位数字,请使用

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)

参见online R demo(?<=\[)\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]"

参见regex demo详情:

  • (\[[^\]\[]*) - 第 1 组:[,然后 []
  • 以外的零个或多个字符
  • 70 - 70 字符串。

在替换中,</code> 插入第 1 组值。</p> <p>另一种解决方案是替换方括号内所有出现的 <code>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。

你可以用这个。它将替换 [ 和 . 之间的所有数字。 :

preg_replace('/(?<=\[)(\d*)(?=\.)/', '80', 'filter [70.00-140.00]');