1

我正在使用 notepadd++ 来搜索和替换很多名称。

我需要把这些

 Neil Kilkenny
 Mateja Kežman
 Kim Do-Heon

进入这个:

 Neil,Kilkenny
 Mateja,Kežman
 Kim,Do-Heon

到目前为止,我得到了:

 search: ([A-Z]+)([a-z]+) ([A-Z]+)([a-z]+)
 replace: $1,$2

问题:我的正则表达式与其中ž-其中的名称不匹配。

我考虑过使用.,但我不知道这些特殊字符中有多少或它们会出现在哪里。

4

5 回答 5

3

试试这个:

([^ \n\t\r]+) ([^ \n\t\r]+)

(不要忘记后面的空格^

于 2012-12-19T15:55:22.617 回答
2

我认为您唯一确定的是名称将用空格分隔,并且名字在前。因此,我认为使用.会很好。

([^\s]+) (.+)

-或者-

([\S]+) (.+)

(感谢@Simon 提供了第二个更具可读性的解决方案)。

这应该抓住空间之前的所有东西并放在一个组中,并将空间之后的所有东西(包括更多空间)放在一个组中。


我只是注意到 OP 没有切换组的顺序,如果是这种情况,简单的 find a replace on<space>就可以了。但是提供的正则表达式将允许您<last name>, <first name>根据需要进行操作。

作为参考,Notepad++ 使用 PCRE。http://perldoc.perl.org/perlre.html

于 2012-12-19T15:55:31.820 回答
1

如果这些是剩下的所有空格,请搜索单个空格(或者[ ]+如果您担心可能存在连续空格)并替换为,. 对于单个空格选项,您甚至不需要正则表达式模式。

于 2012-12-19T15:58:21.060 回答
0

这个正则表达式似乎正在工作(将组从 4 减少到 2):

    ([A-Z]+[a-z]+) ([A-Z]+[a-z]+)
于 2012-12-19T15:56:59.913 回答
-1

要获得比赛,请\n改用。
正则表达式:([a-zA-Z]+)\s([a-zA-Z]+)
替换:\1,\2

于 2012-12-19T15:53:38.420 回答