python正则表达式和排序数据

时间:2018-06-14 08:29:44

标签: python

111111个| 1234 | 99个| 777个
222222/17/4321/222
333333_333_3333_33
444444-444-44-4444
555555 | 55 | 5555 | 555

如何对此结果进行排序:

111111个| 1234 | 99个| 777个
222222个| 4321 | 17个| 222个
333333个| 3333 | 33个| 333个
444444个| 4444 | 44个| 444个
555555 | 5555 | 55 | 555

>>> s = '111111|1234|99|777\n222222/17/4321/222\n333333_333_3333_33\n444444-444-44-4444\n555555 | 55 | 5555 | 555'
>>> p = re.compile(r'\d{6}[\||/|_|\-](?:\d{4}|\d{3}|\d{2})[\||/|_|\-](?:\d{4}|\d{3}|\d{2})[\||/|_|\-](?:\d{4}|\d{3}|\d{2})')
>>> print re.sub('[/|_-]','|',s)
111111|1234|99|777
222222|17|4321|222
333333|333|3333|33
444444|444|44|4444
555555 | 55 | 5555 | 555

和如何在python中打印\ 1 \ 2像sed一样?

root@localhost:~# echo abc | sed -r 's/(a)(b)c/\1\2/'
ab

2 个答案:

答案 0 :(得分:0)

lines = theString.split('\n')

for line in lines:
    print sorted(re.findall(r"[\w]+", line),reverse=True)

我假设你知道python的一些内容并且可以将它存储在其他变量中。

要跳过\分隔符,您只需在Python中使用\\(一般用编程语言)。

答案 1 :(得分:0)

使用python和re模块确实可以使用组并将组i的内容与\i匹配。但是,对于您的应用程序,我建议您使用更易读的正则表达式来查找具有正好6,4,3和2位数的数字。然后你可以重新排列它们以产生预期的输出,如下所示只有两行代码:

import re

s = '111111|1234|99|777\n222222/17/4321/222\n333333_333_3333_33\n444444-444-44-4444\n555555 | 55 | 5555 | 555'

interm = [re.findall('\D('+i+')\D', s) for i in ('\d{6}','\d{4}','\d{2}','\d{3}')]
result = "\n".join(["|".join(line) for line in list(zip(*interm))])

print(result)
# 111111|1234|99|777
# 222222|4321|17|222
# 333333|3333|33|333
# 444444|4444|44|444
# 555555|5555|55|555