在可以包含正斜杠和破折号的行中用逗号替换白色 space

replace white space with commas in lines that can contain forward slashes and dashes

我正在尝试将行中的白色 space 替换为文本,将正斜杠替换为逗号,而不在行尾添加逗号。

我正在使用带有单独查找和替换字符串的文本编辑器。

输入看起来像这样(一些不同的变量):

CATEGORIES:ORION/AKC Collection accounts receivable White Plains 
CATEGORIES:ABITIBIBOWATER/NOA1 ENRON/NOA PAPERCO/CL DWA 
CATEGORIES:ONSITE FAO 
CATEGORIES:LAR-DAN Lar-Dan 

结果应该是:

CATEGORIES:ORION/AKC,Collection,accounts,receivable,White,Plains 
CATEGORIES:ABITIBIBOWATER/NOA1,ENRON/NOA,PAPERCO/CL,DWA 
CATEGORIES:ONSITE,FAO 
CATEGORIES:LAR-DAN,Lar-Dan 

我试过了:

CATEGORIES:([A-Z|a-z])*

但它只让我得到第一个表达式

CATEGORIES:ORION (in the first example.

从你的例子来看,你似乎没有替换 1.白色space与文本行 2. 带逗号的正斜杠

虽然您期望输出将白色 space 替换为逗号

这可以通过搜索以下模式来实现

(?<=\w)\s(?=\w)

然后简单地用逗号替换它。

这将只搜索被字符包围的白色 space 并忽略末尾跟换行符的 space。

您可以在任何编辑器中执行此操作(在记事本++和vim上试过)

另外,如果你想实现 1.白色space与文本行 2. 带逗号的正斜杠

然后对于 #1,在您的文件中搜索 (?<=\w)\s(?=\w) 并将其替换为您想要的文本。

对于 #2,在您的文件中搜索 \/ 并将其替换为 ,

您尝试的正则表达式 CATEGORIES:([A-Z|a-z])* 匹配 CATEGORIES: 后跟一个捕获组重复零次或多次,范围 a-zA-Z 以及 | 因为他们在 character class 中。例如,这也匹配 CATEGORIES:ONSITE||

你可能做的是匹配捕获组中的 CATEGORIES 并使用 \G 进行迭代匹配,你在第二个捕获组中捕获非白色space 字符,然后匹配一个或更多次 space 其中字符串的末尾 $ 没有跟随。

(CATEGORIES:|\G(?!^))(\S+)[ ]+(?!$)

Regex demo

并替换为后跟逗号的 2 个捕获组

,