如何使用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:
)在当前位置右侧的正向前视。