如何删除字符的特定实例,但不是全部?

时间:2019-04-24 19:03:10

标签: regex knime

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

  

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

我想删除所有的“?;”但前提是它们以这种方式发生。

我正在使用KNIME并尝试在String Manipulation节点中使用regexReplace($col1$,"[?;]","")regexReplace($col1$,"?;",""),但是所有的实例?和;被删除。

我希望输出为

  

BorisovaSvetlana A.; KimHak Joong;蒲小涛;刘鸿文*

但实际输出是

  

BorisovaSvetlana A.KimHak JoongPuxiaotao刘洪文*

由于我对KNIME和regex都是陌生的,因此向正确方向的任何指导将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以转义?,而不必将其放在诸如\?这样的备用位置。由于\由于引号需要被转义,因此在字符串内的正确转义是\\?。因此,以下内容应可满足您的要求:

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

您输入的内容将产生:

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

Workflow showing the result and the regex

答案 1 :(得分:0)

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

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

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