python - 将长字符串转换为矩阵,并对其进行清理

标签 python regex string numpy matrix

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

该文件的原始创建者试图通过在一定数量的字母后设置 \n 制表符来使其成为“矩阵”。

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

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

此外,字符串中还存在某些垃圾字符,例如“&”、“#”和“{”。有标准模块可以使用吗?

我想人们可以获取原始字符串,根据 '\n' 标记的位置将其分成几个字符串,然后以某种方式将这些字符串按字符串的每个单独字符放入 numpy ndarray 中。

最佳答案

您可以通过几种方式执行此操作,您可以检查每个字符,看看它是否是字母数字:

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,翻译 有点不同:

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)

关于python - 将长字符串转换为矩阵,并对其进行清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34212429/

相关文章:

python - 使用SciPy接口(interface)和Cython直接调用BLAS/LAPACK

python - 使用 Python 和 Selenium Webdriver 存储动态下拉选项

java - 字符串替换正则表达式仅在 [] 之外使用标记

c++ - 动态长度字符串数组

python - 在 Spyder(Python 中)中按 *enter* 是制表符还是 4 个空格?

python - ,= 运算符

c++ - 正则表达式 C++ : extract substring

java - 在Java中执行RFC计算的算法

c++ - 迭代/递归

PHP:搜索所有 Twitter 用户名的字符串并提取它们