将长字符串转换为矩阵,清除它

时间:2015-12-10 21:52:28

标签: python regex string numpy matrix

我有一个很大的文本文件,它只是一个很长的字符串。这是一个巨大的文本块。

此文件的原始制作者试图通过在一定数量的字母后设置\n标签使其成为“矩阵”。

string = "adfajdslfkajsddf&&adfadfladfsjdfl\nadk...fhaldkfjahsdf"

使用带有模块re的正则表达式(可能),如何将这个庞大字符串的每个字符输入到最初应该是的矩阵中?

此外,字符串中还有某些垃圾字符,例如“&”和“#”和“{”。是否有标准模块可供使用?

我想可以拿出原始字符串,根据'\ n'标记的位置将其分解为几个字符串,然后将这些字符串以某种方式放入字符串中每个字符的numpy ndarray中。

1 个答案:

答案 0 :(得分:2)

你可以这样做,你可以检查每个char是否是字母数字:

stg = "abcde123]\nefghi456}\njk{lmn789"
import numpy as np

arr = np.array([ch for line in stg for ch in line if ch.isdigit() or ch.isalpha()])

如果所有垃圾都是标点符号,您可以str.translate

from string import punctuation

junk = {ord(ch):"" for ch in punctuation + "\n"}


arr = np.array(list(stg.translate(junk)))

两者都会给你一个单一的列表:

['a' 'b' 'c' 'd' 'e' '1' '2' '3' 'e' 'f' 'g' 'h' 'i' '4' '5' '6' 'j' 'k' 'l' 'm' 'n' '7' '8' '9']

如果您需要多维数组,可以在换行符上拆分:

arr = np.array([[ch for ch in line ] for line in stg.translate(junk).split()])

arr = np.array([[ch for ch in line if ch.isdigit() or ch.isalpha()] for line in stg.split()])

哪个会给你:

[['a' 'b' 'c' 'd' 'e' '1' '2' '3']
 ['e' 'f' 'g' 'h' 'i' '4' '5' '6']
 ['j' 'k' 'l' 'm' 'n' '7' '8' '9']]

对于python2,translate有点不同:

from string import punctuation
import numpy as np


stg = "abcde123]\nefghi456}\njk{lmn789"
arr = np.array([[ch for ch in line ] for line in stg.translate(None, punctuation).split()])
print(arr)