我有这样的文字:
\/::360::__/
|::559:::| |
::468::\:\~\:\ \/__/
/:/\:\ /::390::\__\
::138::
::380:: /:/ \/__/
/::144::\ \
/::\ ::145:: \
::418:: ___
::539::___
\|::483::__|
这里使用\
,|
和_
进行了一些模式设置。每行在某个随机位置添加格式为::539::
等的行号。
我想首先根据给定的行号对所有行进行排序,然后从每行中删除**::line-number::**
以获得实际标志。
(实际问题有600条,随机排列。需要对它们进行适当的剥离以找到标记。)
The actual complete text file link
我已经发布了如下使用的python代码。
#!/usr/bin/python3
# import sys
with open( 'sorted.txt' ) as file:
randlst =[0] * 600
for line in file:
num=''
strng=''
for each in line:
if each.isdigit():
num += each
else:
strng += each
strng = strng.strip('::::')
num = int(num)
randlst.insert(num,strng)
for i in range(600):
if randlst[i] !=0:
print(str(randlst[i]).replace('::::',''))
在这段代码中,sorted.txt文件是在使用bash对实际输入文件(在上面的链接中给出)进行排序后生成的,因为我认为在python中进行排序会变得很困难。
问题在于,如您在此处看到的那样,bash进行的排序并不完全准确:
::0:: ___
::1:: /\__\
\/__::10::/
/\ \::100::
/::\ ::101:: \
::102::/:/\:\ \
/:/ \:\::103:: \
由于这个小错误,最终输出没有几个字母,我的提交被拒绝了。
请指出我该如何改善(我不了解正则表达式,对不起如此糟糕的脚本)。
或者,您可以建议使用bash命令来执行此工作,而不是使用python吗?
答案 0 :(得分:-1)
这将根据数字对行进行排序,并将其写入标准输出(将::<number>::
替换为''
):
data = r""" \/::360::__/
|::559:::| |
::468::\:\~\:\ \/__/
/:/\:\ /::390::\__\
::138::
::380:: /:/ \/__/
/::144::\ \
/::\ ::145:: \
::418:: ___
::539::___
\|::483::__|"""
import re
for s1, _, s2 in sorted(re.findall(r'^(.*?)(?:::)(\d+)(?:::)(.*?)$', data, flags=re.M), key=lambda v: int(v[1])):
print(s1 + s2)
打印:
/\ \
/::\ \
\/__/
/:/ \/__/
/:/\:\ /\__\
___
\:\~\:\ \/__/
\|__|
___
|:| |
答案 1 :(得分:-1)
这是一个python解决方案,它根据嵌入的行号对行进行排序,然后剥离这些行号并打印出图案
>>> print(s)
\/::360::__/
|::559:::| |
::468::\:\~\:\ \/__/
/:/\:\ /::390::\__\
::138::
::380:: /:/ \/__/
/::144::\ \
/::\ ::145:: \
::418:: ___
::539::___
\|::483::__|
>>>
>>>
>>> sorted_s ='\n'.join(sorted(s.splitlines(), key=lambda x: int(re.findall(r'\d+', x)[0])))
>>> print (re.sub(r'::\d+::', '', sorted_s))
/\ \
/::\ \
\/__/
/:/ \/__/
/:/\:\ /\__\
___
\:\~\:\ \/__/
\|__|
___
|:| |
>>>
尝试使用G_M用户创建的页面https://bpaste.net/raw/5379781c4ee8
的内容时,这就是我们所得到的
>>> import requests
>>> import re
>>>
>>> r = requests.get('https://bpaste.net/raw/5379781c4ee8')
>>> s = r.text
>>> sorted_s ='\n'.join(sorted(s.splitlines(), key=lambda x: int(re.findall(r'\d+', x)[0])))
>>> print (re.sub(r'::\d+::', '', sorted_s))
___
/\__\
/::| |
/:|:| |
/:/|:|__|__
/:/ |::::\__\
\/__/~~/:/ /
/:/ /
/:/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\__\
/:/ /
/:/__/
/::\__\____
/:/\:::::\__\
\/_|:|~~|~
|:| |
|:| |
|:| |
\|__|
___
/\ \
\:\ \
/::\__\
__/:/\/__/
/\/:/ /
\::/__/
\:\__\
\/__/
___
/\__\
/::| |
/:|:| |
/:/|:| |__
/:/ |:| /\__\
\/__|:|/:/ /
|:/:/ /
|::/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/:/ \:\ \
/:/__/_\:\__\
\:\ /\ \/__/
\:\ \:\__\
\:\/:/ /
\::/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\ \ \
_\:\~\ \ \
/\ \:\ \ \__\
\:\ \:\ \/__/
\:\ \:\__\
\:\/:/ /
\::/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/:/ \:\ \
/:/__/ \:\__\
\:\ \ \/__/
\:\ \
\:\ \
\:\__\
\/__/
___
/\ \
\:\ \
/::\__\
__/:/\/__/
/\/:/ /
\::/__/
\:\__\
\/__/
___
/\ \
\:\ \
/::\__\
__/:/\/__/
/\/:/ /
\::/__/
\:\__\
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/_|::\/:/ /
|:|::/ /
|:|\/__/
|:| |
\|__|
___
/\ \
\:\ \
\:\ \
/::\ \
/:/\:\__\
/:/ \/__/
/:/ /
\/__/
___
/\ \
\:\ \
/::\__\
__/:/\/__/
/\/:/ /
\::/__/
\:\__\
\/__/
___
/\ \
/::\ \
/:/\ \ \
_\:\~\ \ \
/\ \:\ \ \__\
\:\ \:\ \/__/
\:\ \:\__\
\:\/:/ /
\::/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\__\
/:/ /
/:/__/
/::\__\____
/:/\:::::\__\
\/_|:|~~|~
|:| |
|:| |
|:| |
\|__|
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\:\~\:\ \/__/
\:\ \:\__\
\:\ \/__/
\:\__\
\/__/
___
|\__\
|:| |
|:| |
|:|__|__
/::::\__\
/:/~~/~
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\/:/ /
\::/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/_|::\/:/ /
|:|::/ /
|:|\/__/
|:| |
\|__|
___
/\ \
\:\ \
\:\ \
/::\ \
/:/\:\__\
/:/ \/__/
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/:/ \:\ \
/:/__/ \:\__\
\:\ \ /:/ /
\:\ /:/ /
\:\/:/ /
\::/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\ \/__/
\:\__\
\/__/
___
/\ \
\:\ \
\:\ \
/::\ \
/:/\:\__\
/:/ \/__/
/:/ /
\/__/
___
/\__\
/:/ /
/:/__/
/::\ \ ___
/:/\:\ /\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\:\~\:\ \/__/
\:\ \:\__\
\:\ \/__/
\:\__\
\/__/
___
/\__\
/:/ /
/:/__/
/::\ \ ___
/:/\:\ /\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/__\:\/:/ /
\::/ /
/:/ /
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/:/ \:\ \
/:/__/ \:\__\
\:\ \ \/__/
\:\ \
\:\ \
\:\__\
\/__/
___
/\__\
/:/ /
/:/__/
/::\__\____
/:/\:::::\__\
\/_|:|~~|~
|:| |
|:| |
|:| |
\|__|
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\:\~\:\ \/__/
\:\ \:\__\
\:\ \/__/
\:\__\
\/__/
___
/\ \
/::\ \
/:/\:\ \
/::\~\:\ \
/:/\:\ \:\__\
\/_|::\/:/ /
|:|::/ /
|:|\/__/
|:| |
\|__|
___
/\ \
/::\ \
/:/\ \ \
_\:\~\ \ \
/\ \:\ \ \__\
\:\ \:\ \/__/
\:\ \:\__\
\:\/:/ /
\::/ /
\/__/
___
/\ \
\:\ \
\:\ \
/::\ \
/:/\:\__\
/:/ \/__/
/:/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/:/ \:\ \
/:/__/ \:\__\
\:\ \ /:/ /
\:\ /:/ /
\:\/:/ /
\::/ /
\/__/
___
/\ \
/::\ \
/:/\:\ \
/:/ \:\ \
/:/__/ \:\__\
\:\ \ /:/ /
\:\ /:/ /
\:\/:/ /
\::/ /
\/__/
___
/\__\
/:/ /
/:/ /
/:/ /
/:/__/
\:\ \
\:\ \
\:\ \
\:\__\
\/__/
___
/\__\
/:/ /
/:/__/
/::\__\____
/:/\:::::\__\
\/_|:|~~|~
|:| |
|:| |
|:| |
\|__|
___
/\ \
\:\ \
/::\__\
__/:/\/__/
/\/:/ /
\::/__/
\:\__\
\/__/
___
/\ \
\:\ \
\:\ \
/::\ \
/:/\:\__\
/:/ \/__/
/:/ /
\/__/
答案 2 :(得分:-1)
尽管标题为bash,但您在问题上放置了Python标记,因此这是在Python中解决此问题的一种方法。我必须创建一个openlearning帐户才能从您的链接中获取文本,但是我将其粘贴为下面的输入文本。
"MAKING ASCII ART IS A KEY PART OF THE HACKERS TOOLKIT"
import re
regex = re.compile(r'(.*)(?:::(\d+)::)(.*)')
with open('file_1', 'r') as f:
d = {}
for line in f:
m = regex.match(line.rstrip())
beg, num, end = m.groups()
d[int(num)] = beg + end
for _, v in sorted(d.items()):
print(v)