我有点挣扎。我需要操作的文件是一个以分号作为字段分隔符的 csv。在某些数据集中添加了包含分号的注释。幸运的是,这些注释以“ ”开头和结尾。
例子:
;;;"sometext many words or few ; more text; even more text";;;;;;
我需要替换“之间的所有分号,但保留文本。谢谢你的帮助。
示例数据集:
Before Regex find & Replace:
Fieldtitles: f1;f2;f3;f4;f5;f6;f7;f8;f9;f10;f11
Dataset1: ;;text;text;;text;text;text;text;text;text
Dataset2: text;"text text text ; text text";text;text;text;text;text;text;text;text;text
After Regex find & Replace:
Fieldtitles: f1;f2;f3;f4;f5;f6;f7;f8;f9;f10;f11
Dataset1: ;;text;text;;text;text;text;text;text;text
Dataset2: text;"text text text _ text text";text;text;text;text;text;text;text;text;text
答案1
- Ctrl+H
- 找什么:
"[^";]*\K;(?=[^";]*")
- 用。。。来代替:
_
- 检查环绕
- 检查正则表达式
- Replace all
解释:
" : a double quote
[^";]* : 0 or more any character that is not a double quote or a semicolumn
\K : forget all we have seen until this position
; : a semicolumn
(?= : start lookahead, make sure we have, after current position,
[^";]* : 0 or more any character that is not a double quote or a semicolumn
" : a double quote
) : ed lookahead
替代品:
_ : an underscore
给定示例的结果:
Fieldtitles: f1;f2;f3;f4;f5;f6;f7;f8;f9;f10;f11
Dataset1: ;;text;text;;text;text;text;text;text;text
Dataset2: text;"text text text _ text text";text;text;text;text;text;text;text;text;text
答案2
在替换窗口中,指定以下内容:
- 找什么:
\"(.*?);(.*?)\"
- 用。。。来代替:
"\1_\2"
- 检查
Regular Expression
无线电子弹。
这将替换;
包含_
一个分列的注释中的。正则表达式细分:
\"
- 从双引号开始匹配(.*?);
- 匹配所有内容,直到第一个半列(.*?)\"
- 匹配所有内容,直到下一个双引号"\1_\2"
- 输出匹配的双引号和匹配的子表达式#1 和#2,同时替换;
为_
。
如果注释中可以有多个分号,只需继续点击Replace All
(选中该Wrap around
选项) - 它将一次替换每个注释中的一个分号,直到替换所有分号。