RegEx用于在名字/姓氏之间添加逗号和空格

时间:2019-04-30 20:39:05

标签: regex string regex-group regex-greedy knime

我有一个姓氏和名字同时出现的名字列表:

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

我想在姓和名之间添加一个逗号和空格,以使输出为:

Borisova, Svetlana A.; Kim, Hak Joong; Pu, Xiaotao; Liu, Hung-wen*

我在KNIME中使用String Manipulation节点,并且我认为将使用regexReplace($col1$, ,""),并且可能使用[az]和[AZ]进行某种先行查找以查找小写的直接字母和大写字母之后的情况,但是我是regex的新手,所以到目前为止,这还只是我的全部。

如何解决此问题?

3 个答案:

答案 0 :(得分:5)

This RegEx可以帮助您设计合适的表达式以匹配所有输入:

([A-Z]{1}[a-z-]{1,})([A-Z]{1}[a-z-]{1,})
  • 它有两个捕获组,一个用于姓氏,另一个用于姓氏。
  • 它与拉丁字符不匹配,如果您愿意,可以将a-z更改为\w
  • 您只需创建一个字符串替换,即可将$1$2替换为$1, $2
  • 如果需要,还可以在表达式中添加其他边界。

这意味着

  • 一个大写字母后跟一个或多个小写字母和破折号表示名字,姓氏相同,您可以根据需要在两组中更改这些边界。

enter image description here


编辑:

根据Pushpesh的建议,可以将其简化为this expression

([A-Z][a-z-]+)([A-Z][a-z-]+)

enter image description here

答案 1 :(得分:2)

“字符串操作”节点中KNIME中的语法应为:

regexReplace($col1$,"([A-Z][a-z-]+)([A-Z][a-z-]+)" ,"$1, $2")

以您的榜样为我工作。正则表达式可以与在重放中收到/建议的所有3个建议一起工作时类似。

答案 2 :(得分:1)

您需要的正则表达式是

([a-z])([A-Z])

第一捕获组([a-z]) 匹配[a-z]下面列表中存在的单个字符 a-z介于(索引97)和z(索引122)之间的单个字符(区分大小写)

第二个捕获组([A-Z]) 匹配[A-Z]下列表中存在的单个字符 A-Z是介于A(索引65)和Z(索引90)(区分大小写)之间的单个字符