目前我的代码出错了,前三个例子工作正常,但最后一个例子没有正常工作。
我评论过显示输出是什么以及应该是什么。
import re
print(filter(None, re.split(r'(\d+) (\w.*) (\d.*)', '6 Name 100/100')))
#['6', 'Name' '100/100']
## Correct
print(filter(None, re.split(r'(\d+) (\w.*) (\d.*)', '6 Name Name-Name 1/1001')))
#['6', 'Name Name-Name', '1/1001']
## Correct
print(filter(None, re.split(r'(\d+) (\w.*) (\d.*)', '6 Name Name`Name 1240/1422')))
#['6', 'Name Name`Name', '1240/1422']
## Correct
print(filter(None, re.split(r'(\d+) (\w.*) (\d.*)', '6 Name Name`Name None')))
#['6', 'Name Name`Name None']
## Wrong, It should be returning:
#['6', 'Name Name`Name', 'None']
欢迎任何想法。
谢谢 - Hyflex
答案 0 :(得分:4)
您似乎正在尝试获取列表并将空间视为分隔符,您似乎想要获取第一个和最后一个元素,然后剩下的只剩下该结果列表的第二个元素。
如果是这样,你可以改为使用匹配:
>>> print re.match(r'^(\S+) (.*?) (\S+)$', '6 Name Name`Name None').groups()
('6', 'Name Name`Name', 'None')
\S
匹配不是空格的每个字符,^
和$
分别匹配行的开头和结尾。
答案 1 :(得分:1)
所以*是一个贪婪的量词,并将继续前进,直到它不再存在。所以你需要添加一个?之后
(\d+) (\w.*?) (\d.*)
此外,\d
还有.*
作为最后一组的前缀。