我想字符串格式轉換正則表達式字符串重組作者名字,姓氏,職務
The European Union - A Very Short Introduction - Pinder, John
到
John Pinder - The European Union - A Very Short Introduction
我有關於「平德」和「約翰」匹配麻煩以所需的方式重新格式化。
我想字符串格式轉換正則表達式字符串重組作者名字,姓氏,職務
The European Union - A Very Short Introduction - Pinder, John
到
John Pinder - The European Union - A Very Short Introduction
我有關於「平德」和「約翰」匹配麻煩以所需的方式重新格式化。
有很多方法可以解決這個問題,所有的問題都需要一些假設。這裏是一個解決方案...
^.+-\s+(.+),\s+(.+)$
它是通過消耗盡可能多的字符可能(高達第一個捕獲組,使用連字符和空格作爲分隔符)工作,然後它假定有一個逗號,後面跟着空格,用來區分名字和姓氏,它假定是字符串的結尾。
根據你對數據一致性的瞭解,這可能對你不起作用,但我認爲有一個解決方案不會限制字符的名稱,而是休息的格式。
非常有幫助 - 謝謝!我以前沒有看過那個正則表達式可視化器。 – blaster
使用此代碼:
$code = preg_match_all('/(?:.*?) - (?:.*?) -(.*?),(.*)/', $string,$matches);
這會給你一個數組,$matches[1]
會給你的姓氏(在這種情況下, 「平德」)和$matches[2]
會給你第一個名字(「約翰」)。如果您想使用$lastname = implode('',$matches[1]);
,則可以將其重新轉換爲字符串。
什麼正則表達式工具? – dawg
你期望什麼是這個排列?例如,如果標題不包含破折號而該名稱不是_last,first_的形式?例如:'歐盟簡介 - 約翰·皮德爾'我想說這不是通過你現在的例子來回答的。否則,它的這個[^ [^ \ S \ r \ n] *(。*?)[^ \ S \ r \ n] * - [^ \ S \ r \ n] *(?:([^ - , \ r \ n]] +?)?,??[^ \ S \ r \ n] *([^ - \ r \ n] +?)?[^ \ S \ r \ n] * $' – sln
好點 - 在我的情況下,預計會有一些排列,雖然我明白一些數據集可能包括多個作者,標點符號作者名稱,帶有逗號的書名等。我沒有使用程序化正則表達式框架,但實際上是插入匹配並將字符串替換爲一個現有的工具。 – blaster