Python 字符串清理

标签 python regex pyqt

我正在用 PyQT 编写程序,需要处理杂乱的字符串并清理它们。可能的输入值变化很大。例如,我想使用字符串:

"Seven_Pounds_(BDrip_1080p_ENG-ITA-GER)_Multisub_x264_bluray_.mkv",  
"The_Birds_1963_HDTV_XvidHD_720p-NPW.avi",  
"1892.XVID.AC3.HD.120_min.avi"  

并将它们变成:
《七磅》,
《飞鸟》,
“1892”

我考虑过使用 re 来转义表达式,但对于最后一个示例,此方法似乎可能会失败。程序Media Gerbil使用 google diff-match-patch处理字符串清理的算法。这似乎是一个更好的选择,但我不确定如何实现。 在 Python/PyQt 中是否有另一种更有效的字符串清理方法,或者 regex 或 diff-match-patch 是最佳途径?

最佳答案

基于你的例子:

import re

a="The_Birds_1963_HDTV_XvidHD_720p-NPW.avi"
b="Seven_Pounds_(BDrip_1080p_ENG-ITA-GER)_Multisub_x264_bluray_.mkv"
c="1892.XVID.AC3.HD.120_min.avi"

def cleanit(str):
    result = []
    l = re.split('[_.]',str)
    flag = 0
    if re.match('^[a-zA-z]+',l[0]):
        flag = 1
    elif re.match('^[0-9]+',l[0]):
        flag = 2

    if flag == 1:
        for x in l:
            if not re.match('^[a-zA-Z]+',x):
                break;
            result.append(x) 
        return " ".join(result)

    if flag == 2:
        for x in l:
            if not re.match('^[0-9]+',x):
                break;
            result.append(x) 
        return " ".join(result)

if __name__ == '__main__':
    print cleanit(a)
    print cleanit(b)
    print cleanit(c)

将打印:

kent$  python cleanit.py
The Birds
Seven Pounds
1892

关于Python 字符串清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7679119/

相关文章:

Python ProcessPoolExecutor 与 QueueHandler

python - 如何在特殊情况下提取两个关键字之间的子字符串?

python - 如何替换sqlalchemy查询中的列

python - 有没有更快的方法来清除文件中的控制字符?

python - 正则表达式 - 匹配范围

python - 使用信号在类之间进行通信

python - PEP8 和 PyQt,如何协调函数大小写?

python - PyQt:当自定义 QAbstractListModel 数据更改时如何更改 QComboBox 中的 currentIndex

python - Tensorflow - 在 tensorflow.models.embeddings 中没有名为 'embeddings' 的模块

python - 在 Azure Functions 中安装requirements.txt 时无法解析对 numpy 的依赖关系