python 正则表达式 - 如何获取一行中的所有名称?

python regular expressions - how to get all the names in a line?

如何使用正则表达式从下面的行中获取名称??

line #1==> 
Elector's Name: Surpam Badurubai Elector's Name: Madavimaru Elector's Name: Madavitannubai 

line #2==>
Elector's Name: GEDAM KARNU Elector's Name: GEDAM BHEEM BAI Elector's Name: Surpam Rajeshwar Rav

我试过了

regex = "\s*Elector\'s\sName\:\s([[a-zA-z]*\s[a-zA-z]*\s*[a-zA-z]*]*)\s" 
re.findall(regex, line)

它正在为第 1 行工作,但无法获取姓氏。 对于第 2 行,它只从姓氏中提取 'Surpam Rajeshwar',但实际上它有 3 个单词。

非常感谢,如果有人可以帮助我解决这个问题或建议我以不同的方式获取名称。 !!

您可以在没有正则表达式的情况下通过使用 Elector's Name: 拆分来做到这一点,从空白中剥离结果项目并删除所有空项目:

ss = ["Elector's Name: Surpam Badurubai Elector's Name: Madavimaru Elector's Name: Madavitannubai",
   "Elector's Name: GEDAM KARNU Elector's Name: GEDAM BHEEM BAI Elector's Name: Surpam Rajeshwar Rav"]
for s in ss:
    print(filter(None, [x.strip() for x in s.split("Elector's Name:")]))

看到一个Python demo,输出:

['Surpam Badurubai', 'Madavimaru', 'Madavitannubai']
['GEDAM KARNU', 'GEDAM BHEEM BAI', 'Surpam Rajeshwar Rav']

以防万一你想研究正则表达式,这里有一个可能的基于正则表达式的解决方案:

re.findall(r"Elector's Name:\s*(.*?)(?=\s*Elector's Name:|$)", s) 

another Python demo

图案详情

  • Elector's Name: - 文字子串
  • \s* - 0+ 个空格
  • (.*?) - 第 1 组(此值由 re.findall 返回):除换行符以外的任何 0+ 个字符(包括 re.DOTALL,包括它们)尽可能少
  • (?=\s*Elector's Name:|$) - 正向前瞻,需要 0+ 个空格和 Elector's Name: 在它们之后或字符串结尾 ($) 紧靠当前位置的右侧。

杰米·扎温斯基:

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

因此,使用 python

line = "Elector's Name: Surpam Badurubai Elector's Name: Madavimaru Elector's Name: Madavitannubai"
[name.strip() for name in line.split("Elector's Name:") if name != '']

根据 "Elector's Name: " 文本(前后有可选空格),看起来它更像是 re.split 的工作,链接在列表理解中以过滤掉空字段:

[x for x in re.split("\s*Elector's Name:\s*",l1) if x]

用你的例子我得到了这些输出:

['GEDAM KARNU', 'GEDAM BHEEM BAI', 'Surpam Rajeshwar Rav']
['Surpam Badurubai', 'Madavimaru', 'Madavitannubai']

请注意,您也可以使用链接到 str.split()str.split() 来实现此目的:

[x.strip() for x in l1.split("Elector's Name:") if x]

如果您只需要获取所有名称,可以尝试使用 .split() 和分隔符 Elector's Name:。喜欢:

names = line.split('Elector's Name:')
for i in names:
    print(i)