python正则表达式-如何获得一行中的所有名称?
如何使用正则表达式从下面的行中获取名称python正则表达式-如何获得一行中的所有名称?,python,regex,python-2.7,python-3.x,names,Python,Regex,Python 2.7,Python 3.x,Names,如何使用正则表达式从下面的行中获取名称 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
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个单词
我很感激,如果有人能帮我做这件事,或者建议我一种不同的方式来获得这些名字 您可以在不使用正则表达式的情况下,通过使用
选民姓名进行拆分:
,从空格中删除结果项并删除所有空项:
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:")]))
见a,输出:
如果您想学习regex,这里有一个可能的基于regex的解决方案:
re.findall(r"Elector's Name:\s*(.*?)(?=\s*Elector's Name:|$)", s)
看
图案细节
-文字子字符串选民姓名:
-0+空格\s*
-组1(此值由(.*)
返回):除换行符以外的任何0+字符(使用re.findall
,包括它们)尽可能少re.DOTALL
-一种正向前瞻,需要0+个空格和(?=\s*选举人姓名:|$)
,紧跟在它们之后,或紧靠当前位置右侧的字符串(选举人姓名:
)结尾$
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 != '']
看起来这更像是一项工作,根据
“选民姓名:”
文本(前面或后面有可选空格),在列表中链接以过滤空字段:
[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]
如果您只需要获取所有姓名,可以尝试使用分隔符
选举人姓名:
。比如:
names = line.split('Elector's Name:')
for i in names:
print(i)
在RE中使用原始字符串,您可能希望前导和尾随空格为“零或更多”:`regex=r“\s*…\s*”感谢Wiktor帮助我进行了简洁的描述。我已经应用了这个,而且它很有效。谢谢你的回答!
names = line.split('Elector's Name:')
for i in names:
print(i)