Python拆分运算符

时间:2014-11-05 06:48:58

标签: python

我想在以下基础上拆分以下内容: -

a = '"64 213121\r\n\r\n64 40771494536\r\n\r\n64 91547531\r\n\r\n64 40771494536\r\n\r\n"'

我只想要[213121,40771494536,91547531],即我希望在\r\n\r\n加上唯一编号64的基础上进行拆分。这64也可以是其他整数。

我目前这样做: -

    a = a.split('\r\n\r\n')
    temp_a = []
    for i in a:
        try: #using try because sometimes , the split function returns '', which cannot be spliited further and hence nothing at index 1 position.
            i = i.split(' ')[1]
            temp_a.append(i)
        except : pass

任何更好的pythonic解决方案。

4 个答案:

答案 0 :(得分:2)

也许你想要的只是一个更加pythonic的?

print [x.split(' ')[1] for x in a.split('\r\n\r\n') if len(x) > 1]

结果:

['213121', '40771494536', '91547531', '40771494536']

只需使用你的拆分方法,更加pythonic。

如果您不需要重复的数字,请使用:

print list(set([x.split(' ')[1] for x in a.split('\r\n\r\n') if len(x) > 1]))

结果:

['91547531', '213121', '40771494536']

答案 1 :(得分:0)

Pythonic方式:

>>>a = "64 213121\r\n\r\n64 40771494536\r\n\r\n64 91547531\r\n\r\n64 40771494536\r\n\r\n"
>>>list(set(a.replace('\r\n\r\n',' ').split(' ')[1::2]))
['91547531', '213121', '40771494536']    

使用正则表达式:

>>> a = "64 213121\r\n\r\n64 40771494536\r\n\r\n64 91547531\r\n\r\n64 40771494536\r\n\r\n"
>>> [ x for x in re.findall('\d+',a) if len(x)>2 ]
['213121', '40771494536', '91547531', '40771494536']

简单地:

>>> re.findall('\d{3,}',a)
['213121', '40771494536', '91547531', '40771494536']

这里我在正则表达式中使用{n,m},匹配从m到n次重复
示例a {2,}将匹配aab表示两次或更多次重复或

答案 2 :(得分:0)

有两个选区,第一个和最后64个,所以放在选区组? 中间组应包含数字\d和一些跟踪[\r\n]+

试试这个:

>>> import re
>>> test = '"64 213121\r\n\r\n64 40771494536\r\n\r\n64 91547531\r\n\r\n64 40771494536\r\n\r\n"'
>>> re.findall(r'[64\s]?(\d+?)[\r\n]+[64]?', test)
['213121', '40771494536', '91547531', '40771494536']

答案 3 :(得分:0)

a = '"64 213121\r\n\r\n64 40771494536\r\n\r\n64 91547531\r\n\r\n64 40771494536\r\n\r\n"'
b = [int(s) for s in a.split() if (s.isdigit() and s != '64')]

这将有助于实现您的目标。

说明:

它检查分割的字符串是否为数字,是否不等于'64',然后将其转换为字符串。