需要关于Python正则表达式的帮助

3

我有一个类似下面所示的文件 - 是否可以执行正则表达式?

text1  769,230,123
text2  70
text3  213,445
text4  24,356
text5  1,2,4

如何输出如下所示的结果?

要给出如下所示的结果吗?

['769','230','123']
['70']
['213','445']

我的当前代码如下:

with open(filename,'r') as output:
    for line in output:
        a = line
        a = a.strip()
        #regex.compile here
        print regex.findall(a)

任何帮助或指导对我来说都非常有用。谢谢。
5个回答

1
以下正则表达式将从行中提取逗号分隔的数字,然后我们可以应用split(',')来提取数字:
import re
line = "text1  769,230,123"
mat = re.match(r'.*? ([\d+,]+).*', line)
nums = mat.group(1).split(',')
for num in nums:
    print num

输出

769
230
123

1
以下内容应该适用于您。
>>> import re
>>> regex = re.compile(r'\b\d+\b')
>>> with open(filename, 'r') as output:
...     for line in output:
...         matches = regex.findall(line)
...         for m in matches:
...             print m

输出

769
230
123
70
213
445
24
356
1
2
4

1

看起来你只需要查找数字序列:

regex = re.compile("[ ,]([0-9]+)")

使用这个正则表达式搜索该行,也会返回 text1 中的 1 - Nir Alfasi

0
假设您始终在text#和逗号分隔的值之间有2个空格。这里是一种简单的方法,将分隔的值提取到数组中。
list = []
with open(filename,'r') as output:
    for line in output:
        line = line.strip('  ')
        list.append(line[1].strip(','))

这将生成一个嵌套列表

print list[0] #['769','230','123']
print list[1] #['70']
print list[2] #['213','445']

0
你不需要使用正则表达式。只需使用 line.split(',')

如果我们采纳您的建议,第一行将返回“text1 769”作为拆分的第一个值。 - Nir Alfasi
1
@alfasin 可以分两次吗?x.split(',') for x in line.split(' ')。我觉得这样更容易理解。 - Vivek Rai
@VivekRai 在结果列表中计数空格的数量并根据拆分后每个元素的位置来计算似乎在我看来非常不安全。 - Nir Alfasi
1
当然可以。只是如果楼主想尝试其他选择,谢谢! - Vivek Rai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接