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)
图案详情
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)
如何使用正则表达式从下面的行中获取名称??
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)
图案详情
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)