【发布时间】:2017-01-30 12:07:46
【问题描述】:
我有一个用逗号分隔的名字列表,名字的格式是姓氏,后跟名字和中间名,像这样
Parameshwar S、Goutami、Patil D B
我想使用正则表达式来查找和替换,以便我的输出如下所示,名字中间名和姓氏S Parameshwar,Goutami,DB Patil
【问题讨论】:
-
你试过什么?什么不起作用,错误的结果是什么?查找有关在正则表达式替换操作中使用 捕获组 的基本教程。
我有一个用逗号分隔的名字列表,名字的格式是姓氏,后跟名字和中间名,像这样
Parameshwar S、Goutami、Patil D B
我想使用正则表达式来查找和替换,以便我的输出如下所示,名字中间名和姓氏S Parameshwar,Goutami,DB Patil
【问题讨论】:
使用正则表达式 ([a-zA-Z]+) +([a-zA-Z][^\n\r,]*)(?=$|,) 查找并替换为 \2 \1
https://regex101.com/r/qH6rL9/2查看结果。
简而言之,这就是正则表达式的作用
([a-zA-Z]+):(第 1 组)一堆字母+:后跟至少一个空格([a-zA-Z][^\n\r,]*):(第 2 组)后跟以字母开头,然后跟非-newlines-non-commas(?=$|,): 直到你遇到一个位置,要么是行尾,要么是逗号
第 1 组是姓氏,第 2 组是姓名的其余部分。
【讨论】:
[^,]+ 匹配,并且最后一个前瞻组中的捕获组实际上是多余的。我已经稍微更新了答案