我想在以下基础上拆分以下内容: -
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解决方案。
答案 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',然后将其转换为字符串。