Python regex或其他从带有变量项的行中获取数据的方法

Python regex或其他从带有变量项的行中获取数据的方法,python,regex,string,split,Python,Regex,String,Split,在python中,我试图从一行中获取数据。 这些线条看起来像: 1. cpasite=5 nsubl=4 cpatypes=3,4,5,6 2. cpasite=6 nsubl=2 cpatypes=7,8 3. cpasite=7 nsubl=4 cpatypes=9,10 4. cpasite=8 nsubl=2 cpatypes=11,12 5. cpasite=9 nsubl=6 cpatypes=13,14,15,16,17,18 我已将其注册为: pattern

在python中,我试图从一行中获取数据。 这些线条看起来像:

 1.  cpasite=5 nsubl=4 cpatypes=3,4,5,6
 2.  cpasite=6 nsubl=2 cpatypes=7,8
 3.  cpasite=7 nsubl=4 cpatypes=9,10
 4.  cpasite=8 nsubl=2 cpatypes=11,12
 5.  cpasite=9 nsubl=6 cpatypes=13,14,15,16,17,18
我已将其注册为:

pattern=r'(\d+)\. \s* cpasite=(.*)\s* nsubl=(.*)\s* cpatypes=(.*)'
问题是,我需要这些网站(如3,4,5,6)分开,以便我可以使用它们为我的目的。但考虑到这个数字不是固定的,我不能拆分(据我所知)


如何使用这些CPA站点?

为什么不使用您的
regex
,然后使用第四个捕获的组,它将是: “3,4,5,6”

然后,您可以在
上拆分该字符串,以获得可单独使用的值列表:

s = '3,4,5,6'
s = map(int, s.split(','))

print s
[3,4,5,6]

>>> print s[2]
5

斯普利特是你的朋友。更少的正则表达式==更少的复杂性

s = '1.  cpasite=5 nsubl=4 cpatypes=3,4,5,6'
sites = s.split('=')[-1]
sites = sites.split(',')

应该是:

 pattern=r'(\d+)\. \s* cpasite=(.*)\s* nsubl=(.*)\s* cpatypes=(\d+)(?:,(\d+))*'
然而,出于某种原因,似乎

(\d+)(?:,(\d+))*
仅捕获第一个类型和最后一个类型在我看来似乎是re模块的一个缺陷

向四周转弯:

 pattern=r'(\d+)\. \s* cpasite=(.*)\s* nsubl=(.*)\s* cpatypes=(\d+)(?:,(\d+))*'
但是,如果您知道可以拥有的CPA类型的最大数量,那么

pattern=r'(\d+)\. \s* cpasite=(.*)\s* nsubl=(.*)\s* cpatypes=(\d+)(?:,(\d+))?(?:,(\d+))?'
重复

(?:,(\d+))?

根据需要多次(最大预期CPA类型),为我工作。尽管如此,它还是有点难看…

你是说
cpatypes
?1。您的regexp是否正确提取
3,4,5,6
等?2.您可以
拆分(“,”)
。但由于我需要所有这些,可能需要一个列表?您的列表很有用,我添加了+1,但我无法解决我的问题。你能看一下这张表吗