替换第一个括号和 之间的文本。无需卸下支架和
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]');
我想用一个特定的字符串替换方括号之间的 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]');