s.split(maxsplit=1) =
把字串按照(任意連續空白)切成「兩塊」,
左邊第一個詞、右邊剩下全部。
1.1 基本語法
str.split(sep=None, maxsplit=-1)
參數解釋:
sep=None
:預設。把所有「連續空白字元」(空格、tab、換行、全形空白等)視為一個分隔。sep=","
:指定分隔符,僅精確匹配該字串。maxsplit
:最多切幾次;切完後會得到「maxsplit + 1」個元素。-1
或省略 = 無限制。
1.2 最常用場景:只想切成兩半
line = "3.1.2 Test Strategy Overview"
num, title = line.split(maxsplit=1)
# ['3.1.2', 'Test Strategy Overview']
好處:
- 自動把一堆空格 / tab 合併成一個分隔。
- 不用自己數空白。
1.3 與指定分隔符的差異
s = "3.1.2 Test Strategy"
print(s.split(maxsplit=1)) # ['3.1.2', 'Test Strategy']
print(s.split(" ", 1)) # ['3.1.2', ' Test Strategy'] -> 多餘空白還在右邊
當你「不在意空白長度」→ 用 maxsplit(不給 sep)。
當你「想保留原始空白」→ 指定 sep=” “,再手動處理。
1.4 常見錯誤
1.5 典型使用情境
1.6 和其它方法比較
1.7 行為細節你可能會忽略
- split()(不給 sep)會自動:
- 連續的任意空白(空格、tab、換行…)被視為一個分隔符。
- 兩端的空白不會產生空字串 token,因此結果看起來像“去掉了頭尾空白”。
- 原字串本身沒有被修改;只是結果列表裡不包含代表頭尾空白的元素。
- 如果整個字串都是空白 → 回傳空列表
[]
,而不是[""]
。
- 但是 split(” “)(明確給一格空白):
- 不會自動去頭尾
- 多個空白會產生空字串
" a b ".split(" ")
→['', '', 'a', '', 'b', '', '']
maxsplit=0
等於不切(結果就是原字串包成 list)。
1.8 快速測試(可貼進互動環境)
samples = [
"3.1.2 Test Strategy",
"3.1.2 Test Strategy",
"3.1.2",
" 7 Functional Plan ",
"",
" "
]
for s in samples:
print(repr(s), "=>", s.split(maxsplit=1))
輸出:
輸出重點:
“3.1.2” → [‘3.1.2’](只有一段)
” ” → [](因為全是空白)
1.9 什麼時候不適合只用 split(maxsplit=1)
1.10 實務建議範例(含驗證)
# %%
def split_heading_fast(line: str):
line = line.strip()
parts = line.split(maxsplit=1)
if not parts:
return None, "", "empty"
if len(parts) == 1:
return None, line, "no_space"
num, title = parts
if (num
and num[0] != '.'
and not num.endswith('.')
and '..' not in num
and all(ch.isdigit() or ch == '.' for ch in num)):
return num, title.strip(), "fast"
return None, line, "invalid_num"
print(split_heading_fast("3.1.2 Test Strategy"))
# ('3.1.2', 'Test Strategy', 'fast')
輸出:
1.11 快速記憶小抄(Cheat Sheet)
1.12 最後總結
maxsplit
= 限制“切幾次”;最常用值是 1。- 不給
sep
→ 把所有連續空白視為一個分隔;給了sep
→ 精準匹配,不自動壓縮。 - 用
split(maxsplit=1)
解析「編號 + 標題」超好用,但記得必要時加合法性驗證。
推薦hahow線上學習python: https://igrape.net/30afN