基于python中的多个数字进行拆分

时间:2018-02-22 15:51:05

标签: python python-3.x python-2.7

你能帮我弄清楚如何基于多个/一组数字作为分隔符进行拆分吗?

我在以下格式的文件中有内容:

data_file_10572_2018-02-15-12-57-29.file
header_file_13238_2018-02-15-12-57-48.file
sig_file1_17678_2018-02-15-12-57-14.file

预期产出:

data_file
header_file
sig_file1

我是python的新手,我不确定如何基于数字组切割。谢谢你的回复!!

5 个答案:

答案 0 :(得分:1)

我希望这会对你有所帮助。 Method查找可以转换为整数的元素,并将字符串返回到此值。

data = ['data_file_10572_2018-02-15-12-57-29.file', 'header_file_13238_2018-02-15-12-57-48.file', 'sig_file1_17678_2018-02-15-12-57-14.file']

def split_before_int(elem):
    filename = elem.split('_')
    for part in filename:
        if not isinstance(part, (int)):
                return '_'.join(filename[:filename.index(part)-2])

for elem in data:
    print(split_before_int(elem))

输出:

data_file
header_file
sig_file1

答案 1 :(得分:0)

首先index获取_符号的第二个位置,然后python列表部分索引(即list[0:5])以获得第二个{{1}位置的子字符串}}

答案 2 :(得分:0)

files = ['data_file_10572_2018-02-15-12-57-29.file', 'header_file_13238_2018-02-15-12-57-48.file','sig_file1_17678_2018-02-15-12-57-14.file']
cleaned_files = list(map(lambda file: '_'.join(file.split('_')[0:2]), files))

这导致:

['data_file', 'header_file', 'sig_file1']

答案 3 :(得分:0)

您可以使用" _"用正则表达式然后加入除最后一个

之外的元素

<强>实施例

import re
a = "data_file_10572_2018-02-15-12-57-29.file"
print "_".join(re.match("(.*?)_\d",a).group().split("_")[:-1])

<强>输出:

data_file

答案 4 :(得分:0)

如果所有文件名都遵循您描述的模式,则此代码将起作用。

filename = 'data_file_10572_2018-02-15-12-57-29.file'
parts = filename.split('_')
new_filename = '_'.join(parts[:2])

如果文件名的字母部分具有可变数量的下划线,则使用Regex会更好。

import re
pattern = re.compile('_[0-9_-]{3,}.file$')
re.sub(pattern, '', filename)

输出:

data_file

基本上,首先,它创建一个以_开头的模式,后跟3个或更多数字,_或 - 并以.file结尾。 然后使用空字符串替换此模式后面的字符串的最大子字符串。