Python:第二次出现字符后拆分文本

时间:2016-03-30 05:08:14

标签: python python-3.x

我需要在第二次出现' - '字符之前拆分文本。我现在所拥有的是产生不一致的结果。我尝试了各种rsplit和read through的组合,并在SO上尝试了其他解决方案,没有结果。

要分割的示例文件名:some-sample-filename-to-split中返回data.filename。在这种情况下,我只想让'some-sample'返回。

fname, extname = os.path.splitext(data.filename)
file_label = fname.rsplit('/',1)[-1]
file_label2 = file_label.rsplit('-',maxsplit=3)
print(file_label2,'\n','---------------','\n')

5 个答案:

答案 0 :(得分:28)

您可以这样做:

>>> a = "some-sample-filename-to-split"
>>> "-".join(a.split("-", 2)[:2])
'some-sample'

a.split("-", 2)会将字符串拆分为第二次出现-

a.split("-", 2)[:2]将给出列表中的前2个元素。然后只需加入前两个元素。

OR

您可以使用正则表达式:^([\w]+-[\w]+)

>>> import re
>>> reg = r'^([\w]+-[\w]+)'
>>> re.match(reg, a).group()
'some-sample'

编辑:正如评论中所讨论的,以下是您的需求:

def hyphen_split(a):
    if a.count("-") == 1:
        return a.split("-")[0]
    else:
        return "-".join(a.split("-", 2)[:2])

>>> hyphen_split("some-sample-filename-to-split")
'some-sample'
>>> hyphen_split("some-sample")
'some'

答案 1 :(得分:5)

在分隔符的第n次出现时将字符串分成两半的通用形式是:

def split(strng, sep, pos):
    strng = strng.split(sep)
    return sep.join(strng[:pos]), sep.join(strng[pos:])

如果pos为负,则将从字符串末尾开始计数。

>>> strng = 'some-sample-filename-to-split'
>>> split(strng, '-', 3)
('some-sample-filename', 'to-split')
>>> split(strng, '-', -4)
('some', 'sample-filename-to-split')
>>> split(strng, '-', 1000)
('some-sample-filename-to-split', '')
>>> split(strng, '-', -1000)
('', 'some-sample-filename-to-split')

答案 2 :(得分:3)

您可以使用str.index()

def hyphen_split(s):
    pos = s.index('-')
    try:
        return s[:s.index('-', pos + 1)]
    except ValueError:
        return s[:pos]

试验:

>>> hyphen_split("some-sample-filename-to-split")
'some-sample'
>>> hyphen_split("some-sample")
'some'

答案 3 :(得分:2)

您可以使用正则表达式:

import re

file_label = re.search('(.*?-.*?)-', fname).group(1)

答案 4 :(得分:0)

在处理数据框和需要的拆分时 对于整列值,lambda 函数优于正则表达式。

df['column_name'].apply(lambda x: "-".join(x.split('-',2)[:2]))
相关问题