Python 有没有一种方法可以使用正则表达式组合多个字符串?
对正则表达式有意见,但现在还不了解它的用处。 试图从文件中推断数据。文件由名字、姓氏和年级组成 文件: 打开文件代码:Python 有没有一种方法可以使用正则表达式组合多个字符串?,python,python-3.x,regex,Python,Python 3.x,Regex,对正则表达式有意见,但现在还不了解它的用处。 试图从文件中推断数据。文件由名字、姓氏和年级组成 文件: 打开文件代码: ##Regex Code r'([A-Za-z]+)(: B) regcode = r'([A-Za-z]+)(: B)' answer=re.findall(regcode,file) return answer 预期的结果是first name last name。给出的结果是姓氏和字母等级。如何获得所有B年级的名字和姓氏?无需正则表达式即可: students =
##Regex Code r'([A-Za-z]+)(: B)
regcode = r'([A-Za-z]+)(: B)'
answer=re.findall(regcode,file)
return answer
预期的结果是first name last name。给出的结果是姓氏和字母等级。如何获得所有B年级的名字和姓氏?无需正则表达式即可:
students = '''Peter Jenkins: A
Robert Right: B
Kim Long: C
Jim Jim: B'''
for x in students.split('\n'):
string = x.split(': ')
if string[1] == 'B':
print(string[0])
# Robert Right
# Jim Jim
或
由于此任务必须使用正则表达式,因此下面是一个简单的正则表达式解决方案,它返回全名: (.*):B' 在这种情况下有效,因为:
(.*)
返回与:B
匹配的所有文本
查看我的测试和匹配输出。我建议您使用此网站进行正则表达式测试。如果需要正则表达式解决方案(我个人更喜欢Roman Zhak的解决方案),请将您感兴趣的内容放入一个组中,即第一个名称和第二个名称。在冒号和B之后:
重新导入
file=”“”
彼得·詹金斯:A
罗伯特:B
金龙:C
吉姆:B
"""
regcode=r'([A-Za-z]+)([A-Za-z]+):B'
answer=re.findall(regcode,file,re.)
打印(回答)#[('Robert','Right'),('Jim','Jim')]
将捕获组(“()”
)添加到表达式中。组外的所有内容都将被忽略,即使它与表达式匹配
re.findall('(\w+\s+\w+):\s+B', file)
#['Robert Right', 'Jim Jim']
'\w'
是任何字母数字字符,'\s'
是任何类似空格的字符
您可以添加两个组,一个用于名字,另一个用于姓氏:
re.findall('(\w+)\s+(\w+):\s+B', data)
#[('Robert', 'Right'), ('Jim', 'Jim')]
如果一行中有两个以上的名称,则后者将不起作用。是否需要正则表达式?我认为简单的拆分和一些过滤器/组件扩展应该适用于作业。不幸的是,需要正则表达式,或者这不是问题。好的,为什么需要正则表达式?有更简单的(IMO)解决方案。。但是正则表达式的方式:
r'([A-Za-z]+)(:B)
匹配一个单词(在第一组中),然后是:B
(匹配到第二组)。只要再匹配一个单词,它就会起作用。谢谢你的回复。这是一节课
re.findall('(\w+\s+\w+):\s+B', file)
#['Robert Right', 'Jim Jim']
re.findall('(\w+)\s+(\w+):\s+B', data)
#[('Robert', 'Right'), ('Jim', 'Jim')]