在Notepad++中用正则表达式将字符串开头移动到结尾

3

我有一个文本文件:

像这样:

marc_webber
john_grisham
rahmin_darfur
firstname_lastname

我希望输出的结果是这样的(请忽略“van These”这样的双重名称):
Webber, Marc, marc_webber
Grisham, John, john_grisham
Darfur, Rahmin, rahmin_darfur
LastName, FirstName, firstname_lastname

我想将字符串在_处分割,将姓氏移到开头,逗号分隔名字和连接的姓氏放在末尾(甚至可以大写第一个字母),这在编程语言中非常容易实现,但我想知道是否可以使用Notepad++的查找和替换功能与正则表达式实现。
基本上,我需要为名字和姓氏创建变量,并在最后将它们串联起来。

2个回答

8
除了外壳,这应该可以工作(虽然在程序员记事本中测试过...): 查找模式:
((\w+)_(\w+))

替换模式:

\3, \2, \1

你的编辑器不支持整个匹配的\0吗?如果支持,你就可以避免第一组。 - fge
@fge:在程序员记事本中不起作用。感谢提示。 - Stefan
替换应该是\3,\2,\1。但你不能改变任何字母的大小写。 - BoltClock
谢谢!我通过 TextFX > Characters > Proper Case 大致掌握了大小写,但大小写并不是很重要。 - Dennis G

4

我使用sed实现了这个功能(我猜在notepad++中也可以,因为它可能支持perl正则表达式):

$ sed -r 's/(\w+)_(\w+)/\u\2, \u\1, \0/' file.txt
Webber, Marc, marc_webber
Grisham, John, john_grisham
Darfur, Rahmin, rahmin_darfur
Lastname, Firstname, firstname_lastname

要实现您示例中的大写格式化,诀窍在于使用\u
您可以在此处找到有关转义序列的更多信息。

1
Notepad++不支持\u,所以你只能使用小写字母,它也不支持\0,因此你必须捕获整个内容。 - BoltClock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接