如何使用regex从下面这样的行中获取名称?是吗?

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行,它只从姓氏中提取了“supram 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:")]))

见aPython demo,输出:
['Surpam Badurubai', 'Madavimaru', 'Madavitannubai']
['GEDAM KARNU', 'GEDAM BHEEM BAI', 'Surpam Rajeshwar Rav']

如果您想学习regex,这里有一个可能的基于regex的解决方案:
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:)在当前位置右侧的正向前视。

10-04 19:53