在日常項目中,我們經(jīng)常會使用python從字符串中提取我們想要的信息,以下是各種提取信息方法的總結(jié)。
字符串簡單截取(字符串切片)
格式:str[beg:end:step]
描述:字符串[開始索引:結(jié)束索引:步長]切取字符串為開始索引到結(jié)束索引-1內(nèi)的字符串步長不指定時步長為1
參數(shù):
- beg -- 開始索引,默認為0。
- end -- 結(jié)束索引,默認為字符串的長度。
- step -- 步長。
舉例:
print(str[::2]) //::這里表示整個字符串,每兩個位置提取一個
print(str[1:3]) //提取第2個到第3個
print(str[2::]) //截取2 - 末尾的字符
常用的Python內(nèi)置的字符串處理函數(shù)
本小節(jié)介紹了,處理字符串經(jīng)常用到的一些函數(shù)方法。
1 str.find()
語法:str.find(str, beg=0, end=len(string))
描述:Python find() 方法檢測字符串中是否包含子字符串 str ,如果指定 beg(開始) 和 end(結(jié)束) 范圍,則檢查是否包含在指定范圍內(nèi),如果包含子字符串返回開始的索引值,否則返回-1。
參數(shù):
- str -- 指定檢索的字符串
- beg -- 開始索引,默認為0。
- end -- 結(jié)束索引,默認為字符串的長度。

2 str.split()
語法:str.split(str="", num=string.count(str)).
描述:Python split() 通過指定分隔符對字符串進行切片,如果參數(shù) num 有指定值,則分隔 num+1 個子字符串.返回分割后的字符串列表,該方法可以講字符串轉(zhuǎn)化為列表處理。
參數(shù):
- str -- 分隔符,默認為所有的空字符,包括空格、換行(\n)、制表符(\t)等。
- num -- 分割次數(shù)。默認為 -1, 即分隔所有。
另外的:str.splitlines([keepends])按照行('\r', '\r\n', \n')分隔,返回一個包含各行作為元素的列表,如果參數(shù) keepends 為 False,不包含換行符,如果為 True,則保留換行符。

3 str.partition()
語法:str.partition(str)
描述:partition() 方法用來根據(jù)指定的分隔符將字符串進行分割。如果字符串包含指定的分隔符,則返回一個3元的元組,第一個為分隔符左邊的子串,第二個為分隔符本身,第三個為分隔符右邊的子串。
參數(shù):
- str : 指定的分隔符

4 str.replace()
語法:str.replace(old, new, max)
描述:Python replace() 方法把字符串中的 old(舊字符串) 替換成 new(新字符串),如果指定第三個參數(shù)max,則替換不超過 max 次。
參數(shù):
- old -- 將被替換的子字符串。
- new -- 新字符串,用于替換old子字符串。
- max -- 可選字符串, 替換不超過 max 次

5 str.strip()
語法:str.strip([chars]);
描述:Python strip() 方法用于移除字符串頭尾指定的字符(默認為空格或換行符)或字符序列。:該方法只能刪除開頭或是結(jié)尾的字符,不能刪除中間部分的字符。
參數(shù):
- chars -- 移除字符串頭尾指定的字符序列。

6 str.join()
語法:str.join(sequence)
描述:Python join() 方法用于將序列中的元素以指定的字符連接生成一個新的字符串。
參數(shù):
- sequence -- 要連接的元素序列。

上述方法還有其變形,如str.rfind(),這代表從字符串右邊開始處理,正常是從左邊開始處理。下表是其它常用的python字符串自帶函數(shù)方法。
| 方法 | 描述 |
|---|---|
| string.capitalize() | 把字符串的第一個字符大寫 |
| string.center(width) | 返回一個原字符串居中,并使用空格填充至長度 width 的新字符串 |
| string.count(str, beg=0, end=len(string)) | 返回 str 在 string 里面出現(xiàn)的次數(shù),如果 beg 或者 end 指定則返回指定范圍內(nèi) str 出現(xiàn)的次數(shù) |
| string.isalnum() | 如果 string 至少有一個字符并且所有字符都是字母或數(shù)字則返回 True,否則返回 False |
| string.isalpha() | 如果 string 至少有一個字符并且所有字符都是字母則返回 True,否則返回 False |
| string.isdecimal() | 如果 string 只包含十進制數(shù)字則返回 True 否則返回 False. |
| string.isdigit() | 如果 string 只包含數(shù)字則返回 True 否則返回 False. |
| string.islower() | 如果 string 中包含至少一個區(qū)分大小寫的字符,并且所有這些(區(qū)分大小寫的)字符都是小寫,則返回 True,否則返回 False |
| string.isnumeric() | 如果 string 中只包含數(shù)字字符,則返回 True,否則返回 False |
| string.isspace() | 如果 string 中只包含空格,則返回 True,否則返回 False. |
| string.istitle() | 如果 string 是標題化的(見 title())則返回 True,否則返回 False |
| string.isupper() | 如果 string 中包含至少一個區(qū)分大小寫的字符,并且所有這些(區(qū)分大小寫的)字符都是大寫,則返回 True,否則返回 False |
| string.ljust(width) | 返回一個原字符串左對齊,并使用空格填充至長度 width 的新字符串 |
| string.lower() | 轉(zhuǎn)換 string 中所有大寫字符為小寫. |
| string.lstrip() | 截掉 string 左邊的空格 |
| string.swapcase() | 翻轉(zhuǎn) string 中的大小寫 |
| string.upper() | 轉(zhuǎn)換 string 中的小寫字母為大寫 |
3 正則表達式
正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配。本小節(jié)主要介紹Python中常用的正則表達式處理函數(shù)和正則表達式的書寫規(guī)則。
re 模塊使 Python 語言擁有全部的正則表達式功能。所以在python中使用正則表達式處理函數(shù)需要import re
1 re.search()
語法:re.search(pattern, string, flags=0)
描述:re.search 掃描整個字符串并返回第一個成功的匹配。匹配成功re.search方法返回一個匹配的對象,否則返回None。
參數(shù):
- pattern -- 匹配的正則表達式
- string -- 要匹配的字符串。
- flags -- 標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等。

2 re.search()
語法:re.sub(pattern, repl, string, count=0, flags=0)
描述:Python 的 re 模塊提供了re.sub用于替換字符串中的匹配項。
參數(shù):
- pattern : 正則中的模式字符串。
- repl : 替換的字符串,也可為一個函數(shù)。
- string : 要被查找替換的原始字符串。
- count : 模式匹配后替換的最大次數(shù),默認 0 表示替換所有的匹配。

3 re.findall()
語法:pattern.findall(string, pos, endpos)
描述:在字符串中找到正則表達式所匹配的所有子串,并返回一個列表,如果沒有找到匹配的,則返回空列表。注意: match 和 search 是匹配一次 findall 匹配所有。
參數(shù):
- string : 待匹配的字符串。
- pos : 可選參數(shù),指定字符串的起始位置,默認為 0。
- endpos : 可選參數(shù),指定字符串的結(jié)束位置,默認為字符串的長度。

正則表達式模式
模式字符串使用特殊的語法來表示一個正則表達式:
- 字母和數(shù)字表示他們自身。一個正則表達式模式中的字母和數(shù)字匹配同樣的字符串。
- 標點符號只有被轉(zhuǎn)義時才匹配自身,否則它們表示特殊的含義。
- 反斜杠本身需要使用反斜杠轉(zhuǎn)義。
下表列出了正則表達式模式語法中的特殊元素。如果你使用模式的同時提供了可選的標志參數(shù),某些模式元素的含義會改變。
| 模式 | 描述 |
|---|---|
| ^ | 匹配字符串的開頭 |
| $ | 匹配字符串的末尾。 |
| . | 匹配任意字符,除了換行符, |
| [...] | 用來表示一組字符,單獨列出:[amk] 匹配 'a','m'或'k' |
| [^...] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 |
| * | 匹配0個或多個的表達式。 |
| + | 匹配1個或多個的表達式。 |
| ? | 匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式 |
| { n} | 精確匹配 n 個前面表達式。o{2} 不匹配 "Bob" ,匹配 "food" 。 |
| { n,} | 匹配 n 個前面表達式。 "o{1,}" 等價于 "o+"。"o{0,}" 則等價于 "o*"。 |
| { n, m} | 匹配 n 到 m 次由前面的正則表達式定義的片段,貪婪方式 |
| \w | 匹配字母數(shù)字及下劃線 |
| \W | 匹配非字母數(shù)字及下劃線 |
| \s | 匹配任意空白字符,等價于 [ \t\n\r\f]。 |
| \S | 匹配任意非空字符 |
| \d | 匹配任意數(shù)字,等價于 [0-9]. |
| \D | 匹配任意非數(shù)字 |
| \A | 匹配字符串開始 |
| \Z | 匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串。 |
| \z | 匹配字符串結(jié)束 |
| \G | 匹配最后匹配完成的位置。 |
| \b | 匹配一個單詞邊界,例如, 'er\b' 可以匹配"never" 中的 'er' |
| \B | 匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er'. |
- 例子
- [Pp]ython:匹配 "Python" 或 "python"
- rub[ye]:匹配 "ruby" 或 "rube"
- [aeiou]:匹配中括號內(nèi)的任意一個字母
- [0-9]:匹配任何數(shù)字。類似于 [0123456789]
- [a-z]:匹配任何小寫字母
- [A-Z]:匹配任何大寫字母
- [a-zA-Z0-9]:匹配任何字母及數(shù)字
- [^aeiou]:除了aeiou字母以外的所有字符
- [a-zA-Z0-9]{2}:精確匹配兩個任何字母及數(shù)字