2013-07-22 23 views
0

我有一个用分号分隔符以名字姓氏格式分隔的名称的字符串。使用Regex重新排列由分号分隔的字符串内容?

John Doe; R.J. Smith; Peter T. Thompson; Sabine Geiß 

如何将一个重新排序这些名称为 '姓,名',优选地使用正则表达式?

Doe, John; Smith, R.J.; Thompson, Peter T.; Geiß, Sabine 
+2

用什么语言? – Barmar

+0

对不起,我对Python更熟悉,但可以适应php或其他。 – Brad

+0

一般来说,很难知道“姓氏”是什么。 (例如尝试用西班牙语的名字)。 http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – rici

回答

1

假设没有后缀存在(姓氏总是只有最后一个字) ,你会(全球)取代

\s*([^\s;]+(?:\s+[^\s;]+)*)\s+([^\s;]+)\s*(?:;|$) 

$2, $1 
+0

这不适用于字符串中的姓氏,因为它后面没有';'。 – Barmar

+0

@Barmar - 好点。固定。 –

2

正则表达式是:

/\s?([\w.\s]+)\s([\w.]+);/g 

这将匹配第一和第二个字,其次是;

达到你在(例如)的JavaScript想:

your_string.replace(/\s?([\w.\s]+)\s([\w.]+);/g, "$2, $1") 

例子:

"John Doe; R.J. Smith; Peter T. Thompson; Sabine Geiß".replace(/\s?([\w.\s]+)\s([\w.]+);/g, " $2, $1;") 
" Doe, John; Smith, R.J.; Thompson, Peter T.; Sabine Geiß" 
+0

它没有翻转姓氏。 – Barmar

相关问题