我想字符串格式转换正则表达式字符串重组作者名字,姓氏,职务
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