r - 替换第一个括号和之间的文本。无需卸下支架和
问题描述
我想用特定的字符串替换括号之间的 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)
请参阅在线 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 组: ,然后是除and[
之外的零个或多个字符[
]
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
没有 digit 或 digit +.
并且后面没有另一个单词 char(字母、数字或_
或连接符标点符号,因为 ICU 正则表达式默认情况下可识别 Unicode)。
推荐阅读
- mysql - 将 Data Local Infile 加载到截断的表中,但它将第一行的 Primary Key 设置为 0
- java - 适应 DRY 原则的方法
- jenkins - 如何将并行作业限制为声明式管道中的特定代理
- android - 要在我的 Android 设备上支持 WiFi 轻松连接或增强型开放,硬件要求是什么?
- java - 具有字典和空指针的范围
- regex - 获取包含在特殊字符«和»内的字符串之外的所有双引号字符
- c - 为什么这段代码有错误?是因为花括号吗?
- php - 图层滑块中的未定义错误(wordpress cms)
- python - 为“for”循环定义函数以在 Python 中输出数据帧
- c# - 如何获取完整数据,包括 2 个表和 2 个关联表?