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) 

图案细节

  • 选民姓名:
    -文字子字符串
  • \s*
    -0+空格
  • (.*)
    -组1(此值由
    re.findall
    返回):除换行符以外的任何0+字符(使用
    re.DOTALL
    ,包括它们)尽可能少
  • (?=\s*选举人姓名:|$)
    -一种正向前瞻,需要0+个空格和
    选举人姓名:
    ,紧跟在它们之后,或紧靠当前位置右侧的字符串(
    $
    )结尾
杰米·扎温斯基:

有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题

因此,使用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 != '']

看起来这更像是一项工作,根据
“选民姓名:”
文本(前面或后面有可选空格),在列表中链接以过滤空字段:

[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)