如何使用 python 中的正则表达式从无序数据字符串中提取名称?

How to extract names from unordered data string using regular expression in python?

我需要从下面的句子中提取人名。


输入: 替补:MAHAJAN、MEHR CHAND 替补:MAHAJAN、MEHR CHAND DAS、SUDHI RANJAN BOSE、VIVIAN HASAN、GHULAM 引文:1953 AIR 28 1953 SCR 197

输出: MEHR CHAND MAHAJAN, MEHR CHAND MAHAJAN, SUDHI RANJAN DAS, VIVIAN BOSE, GHULAM HASAN


为了从句子的第一部分提取名称,我使用了以下代码。

bench = re.search('BENCH: (.*?) BENCH', contents)
if bench:
    bench = bench.group(1)
    bench = ' '.join(reversed(bench.split(",")))
    print(bench)

输出: MEHR CHAND MAHAJAN

您可以使用此正则表达式来匹配输入数据中的名称:

((?:\w+), (?:\w+(?: \w+)?))(?= BENCH:| CITATION:| \w+,)

这会查找一个单词 (\w+),后跟逗号,然后是用 space (\w+(?: \w+)?) 分隔的一两个单词,然后使用向前查找断言这些词必须后跟 BENCH:CITATION: 之一或后跟逗号 (\w+,).

的另一个词
names = re.findall(r'((?:\w+), (?:\w+(?: \w+)?))(?= BENCH:| CITATION:| \w+,)', contents)

对于您的示例数据,这会产生:

['MAHAJAN, MEHR CHAND', 'MAHAJAN, MEHR CHAND', 'DAS, SUDHI RANJAN', 'BOSE, VIVIAN', 'HASAN, GHULAM']

然后可以根据需要重新格式化此列表:

names = ', '.join((map(lambda n:' '.join(n.split(', ')[-1::-1]), names)))

输出:

'MEHR CHAND MAHAJAN, MEHR CHAND MAHAJAN, SUDHI RANJAN DAS, VIVIAN BOSE, GHULAM HASAN'