regex - Perl 正则表达式替换
问题描述
我需要完全匹配,"",
但不是,"",
例如在这个字符串中
"abc","123","def","","asd","876"",345
我需要替换"",
以下内容,"876"
但不理会""
后面的内容"def"
。
我现在拥有的正则表达式是
$line =~ s/[^,]"",/",/g
然而,这替代了6
from "876"
。
解决方案
使用组替换:
$line =~ s/([^,])"",/$1",/g
或者回顾一下:
$line =~ s/(?<!,)"",/",/g
话虽如此,""
是 CSV 引用的引号,它可以出现在字符串中。例如,这是有效的:"""abc"""
. 为避免破坏这一点,还要"
从后面排除:
$line =~ s/(?<![,"])"",/",/g
推荐阅读
- vbscript - VBS - 文件已创建但我看不到或打开它
- node.js - 将 JSON 记录到 DataDog 日志消息字段
- matlab - 如何在不运行代码的情况下确定代码的结果
- python - 仅将最后一个值输入到 postgres 数据库的脚本
- php - Heroku 在部署时发送错误超时并增加文件
- java - 将特定字段/变量附加到正在实现的接口
- javascript - iframe 在收到 postMessage 内容后加载所有内容
- java - DeferedResult 和 CompletableFeature 之间的区别
- python - 与 GlobalAveragePooling2D() 不兼容的 Dims
- urllib2 - Pytube 出错:signature = cipher.get_signature(js, stream['s']) KeyError: 's'