[英]Split text after the second occurrence of character
我需要在第二次出現“-”字符之前拆分文本。 我現在所擁有的是產生不一致的結果。 我嘗試了rsplit
的各種組合並通讀並嘗試了其他解決方案,但沒有結果。
要拆分的示例文件名:在data.filename
中返回'some-sample-filename-to-split'
。 在這種情況下,我只想返回'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')
你可以這樣做:
>>> a = "some-sample-filename-to-split"
>>> "-".join(a.split("-", 2)[:2])
'some-sample'
a.split("-", 2)
將字符串拆分到第二次出現-
。
a.split("-", 2)[:2]
將給出列表中的前 2 個元素。 然后只需加入前 2 個元素。
或
您可以使用正則表達式: ^([\\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]
return "-".join(a.split("-", 2)[:2])
>>> hyphen_split("some-sample-filename-to-split")
'some-sample'
>>> hyphen_split("some-sample")
'some'
在第 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')
您可以使用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'
您可以使用正則表達式:
import re
file_label = re.search('(.*?-.*?)-', fname).group(1)
在處理數據幀和整個列值所需的拆分時,lambda 函數比正則表達式更好。
df['column_name'].apply(lambda x: "-".join(x.split('-',2)[:2]))
這是一個有點神秘的實現,避免使用join()
:
def split(string, sep, n):
"""Split `string´ at the `n`th occurrence of `sep`"""
pos = reduce(lambda x, _: string.index(sep, x + 1), range(n + 1), -1)
return string[:pos], string[pos + len(sep):]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.