我需要在第二次出现' - '字符之前拆分文本。我现在所拥有的是产生不一致的结果。我尝试了各种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')
答案 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]))