你怎么能删除一个角色的特定实例,而不是全部?

How can you remove specific instances of a character, but not all?

我有一个用分号分隔的名称列表:

BorisovaSvetlana A.;KimHak Joong;PuXiaotao;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;LiuHung-wen*;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?;?

我想删除所有的“?;”但前提是它们以这种模式出现。

我正在使用 KNIME 并尝试在字符串操作节点中使用 regexReplace($col1$,"[?;]","")regexReplace($col1$,"?;",""),但是 ?和 ;已删除。

我希望输出为

BorisovaSvetlana A.;KimHak Joong;PuXiaotao;LiuHung-wen*

但实际输出是

BorisovaSvetlana A.KimHak JoongPuXiaotaoLiuHung-wen*

任何正确方向的指导将不胜感激,因为我是 KNIME 和正则表达式的新手。

您可以转义 ? 而不是像这样将其放入替代项:\?。由于引号需要转义 \,因此正确的转义是字符串中的 \?。因此,以下应该适用于您的请求:

regexReplace($col1$,"\?;","")

对于您的输入,它产生:

BorisovaSvetlana A.;KimHak Joong;PuXiaotao;LiuHung-wen*;?

使用正则表达式:(?:;\?)+ 并替换为空字符串以删除 ?;。请注意,这需要 478 步才能匹配。 Demo

然后使用正则表达式:([A-Z][a-z *.-]+)([A-Z][A-Za-z *.-]+)(?=;|$) 并替换为 , 以获得预期结果。 Demo

regexReplace(regexReplace($col1$,"(?:;\?)+",""), "([A-Z][a-z *.-]+)([A-Z][A-Za-z *.-]+)(?=;|$)", " , ")