Notepad ++ 正则表达式:当分号是字段分隔符时,用破折号替换一个或多个文本值分号

Notepad ++ 正则表达式:当分号是字段分隔符时,用破折号替换一个或多个文本值分号

我有点挣扎。我需要操作的文件是一个以分号作为字段分隔符的 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选项) - 它将一次替换每个注释中的一个分号,直到替换所有分号。

相关内容