首页 > 解决方案 > {First_name 和 First_name Last_name} 模式的正则表达式解决方案:

问题描述

我认为,以下内容应用了 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 [^ ]+ )([^ ]+)

我想我会在最后一个例子中基于那个逗号进行过滤。我的想法是,如果逗号存在,那么我想继续下一个案例。那有意义吗?

标签: regexpython-3.xtext-parsing

解决方案


如果您的数据始终采用这种格式,那么我可以看到不需要执行正则表达式,您可以简单地拆分字符串并使用索引以您需要的格式构造您想要的名称:

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')]

推荐阅读