{First_name 和 First_name Last_name} 模式的正则表达式解决方案:
Regex solution to {First_name and First_name Last_name} pattern:
我认为以下内容应用了 Python 中使用的正则表达式。如果在正则表达式之外还有其他方法可以做到这一点,我愿意接受。
我需要转换这种格式的字符串:
'{First_name1} and {First_name2 Last_name}'
(i.e. John and Mary Jones)
至:
'{First_name1 Last_name2}, {First_name2 Last_name2}
(i.e. John Jones, Mary Jones)
作为正则表达式的新手,这是一种让我难过的模式。我假设我必须找到整个片段的实例,捕获姓氏,然后使用 .sub() 在正确的位置添加副本?
编辑: 虽然到目前为止提出的解决方案确实回答了这个问题,但我想我会提到我发现了另一种情况,目前为止解决方案正在解决这个问题。即:
{First_name1 Last_name1, and First_name2, Last_name2}
很抱歉之前没有看到(因此,写在我原来的问题中)这种模式。
到目前为止,我已经修改了其中一个答案:
([^,]+)(?!\W,)( and [^ ]+ )([^ ]+)
我想我会根据最后一个示例中的那个逗号进行过滤。我的想法是,如果存在逗号,那么我想继续下一个案例。这有意义吗?
如果您的数据始终采用这种格式,那么我可以看到没有必要做正则表达式,您可以简单地拆分字符串并使用索引以您需要的格式构造您想要的名称:
a = 'John and Mary Jones'
a_split = a.split()
[(a_split[0], a_split[-1]), (a_split[-2], a_split[-1])]
结果
[('John', 'Jones'), ('Mary', 'Jones')]
就您的确切输入示例而言,您可以使用:
([^ ]+)( and [^ ]+ )([^ ]+)
在@MonkeyZeus 的帮助下,成功了:
(?!\s)(\W[^\W,]+)(?!,)( and [^ ]+ )([^ ]+)
我认为以下内容应用了 Python 中使用的正则表达式。如果在正则表达式之外还有其他方法可以做到这一点,我愿意接受。
我需要转换这种格式的字符串:
'{First_name1} and {First_name2 Last_name}'
(i.e. John and Mary Jones)
至:
'{First_name1 Last_name2}, {First_name2 Last_name2}
(i.e. John Jones, Mary Jones)
作为正则表达式的新手,这是一种让我难过的模式。我假设我必须找到整个片段的实例,捕获姓氏,然后使用 .sub() 在正确的位置添加副本?
编辑: 虽然到目前为止提出的解决方案确实回答了这个问题,但我想我会提到我发现了另一种情况,目前为止解决方案正在解决这个问题。即:
{First_name1 Last_name1, and First_name2, Last_name2}
很抱歉之前没有看到(因此,写在我原来的问题中)这种模式。
到目前为止,我已经修改了其中一个答案:
([^,]+)(?!\W,)( and [^ ]+ )([^ ]+)
我想我会根据最后一个示例中的那个逗号进行过滤。我的想法是,如果存在逗号,那么我想继续下一个案例。这有意义吗?
如果您的数据始终采用这种格式,那么我可以看到没有必要做正则表达式,您可以简单地拆分字符串并使用索引以您需要的格式构造您想要的名称:
a = 'John and Mary Jones'
a_split = a.split()
[(a_split[0], a_split[-1]), (a_split[-2], a_split[-1])]
结果
[('John', 'Jones'), ('Mary', 'Jones')]
就您的确切输入示例而言,您可以使用:
([^ ]+)( and [^ ]+ )([^ ]+)
在@MonkeyZeus 的帮助下,成功了:
(?!\s)(\W[^\W,]+)(?!,)( and [^ ]+ )([^ ]+)