python正则表达式和sort d

2024-10-03 02:44:02 发布

您现在位置:Python中文网/ 问答频道 /正文

111111 | 1234 | 99 | 777
22222/17/4321/222
333333\u 333\u 3333\u 33
4444-444-44-4444
5555 | 55 | 5555 | 555

如何将此结果排序为:

111111 | 1234 | 99 | 777
2222222 | 4321 | 17 | 222
333 | 3333 | 33 | 333
4444 | 4444 | 44 | 444
5555 | 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

如何像sed一样在python中打印\1\2?你知道吗

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

Tags: echorelocalhostab排序rootsedabc
2条回答
lines = theString.split('\n')

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

我假设您了解一点python并可以将其存储在其他变量中。你知道吗

要跳过\分隔符,只需像Python中的\\一样使用它(在一般编程语言中)。你知道吗

使用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

相关问题 更多 >