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

时间:2019-09-24 18:24:45

标签: regex python-3.x text-parsing

我认为,以下代码适用于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 [^ ]+ )([^ ]+)

在上一个示例中,我认为我会根据该逗号进行过滤。我的想法是,如果出现逗号,那么我想继续讲下一种情况。这有道理吗?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

就您的确切输入示例而言,您可以使用:

([^ ]+)( and [^ ]+ )([^ ]+)

https://regex101.com/r/HkMiWi/1

答案 2 :(得分:0)

在@MonkeyZeus的帮助下,这成功了:

(?!\s)(\W[^\W,]+)(?!,)( and [^ ]+ )([^ ]+)