Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有一种方法可以使用正则表达式组合多个字符串?_Python_Python 3.x_Regex - Fatal编程技术网

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')]