基礎庫
1. 正則表達式:re
符號
()小括號 -- 分組
[]中括號 -- 字符類,匹配所包含的任一字符 #注:字符集合把【】里面的內容當作普通字符!(-\^除外)
{}大括號 -- 限定匹配次數
| 或 r'AC|D' -> AC或AD
. 匹配任一字符(\ 除外)
\. 匹配字符.
^ 脫字符 匹配輸入字符串的開始位置 # r'^AC'
$ 匹配字符串末尾 # r'AC$'
\b 匹配一個單詞的邊界 (單詞定義為字母,數字,下划線) ;\B 與 \b相反 匹配非單詞邊界
\d 匹配任一數字[0-9] ; \D 與 \d相反,[^0-9]
\s 匹配空白字符【\t \n \r \f \v】;\S與\s相反
\w 匹配字母 數字 下划線(中文也可以) 【a-z A-Z 0-9 _】; \W與\w相反
* 匹配子表達式0次或多次,等價於 {0,}
+ 匹配子表達式1次或多次,等價於 {1, }
? 匹配子表達是0次或1次,等價於{0,1}
貪婪模式
貪婪模式(python正則表達式中默認使用),盡可能多的去匹配
s = '<html><title>ssss<\html><\title>' re.search(r'<.+>',s) #輸出: '<html><title>ssss<\html><\title>'
啟用非貪婪模式
re.search(r'<.+?>', s) # 輸出: <html>
命令
1. re.search()
s = 'Bo ke yuan' result = re.search(r'(\w+) (\w+)', s) result.group() # 'Bo ke' result.group(1) # 'Bo'; result.group(2) # 'ke' result.start() #0 (匹配起始位置) result.end() #5 (匹配結束位置) result.span() #(0, 5) (匹配范圍)
2. re.findall()
如果給出的正則表達式包含子組,就會把子組的內容單獨返回回來。
若包含多個子組,將匹配的內容組合成元組返回
如何讓子組不捕獲內容?
非捕獲組(?:) 把所有出現子組的地方都加 ?:
3. re.compile() 編譯正則表達式
如果你需要重復的使用某個正則表達式,那么你可以先將正則表達式編譯成模式對象。
p = re.compile(r'[A-Z]') p.search('Bo Ke Yuan') # ['B'] p.findall('Bo Ke Yuan') # ['B', 'K', 'Y']
2. 參數:argparse
基本用法:
import argparse # step1. 導入模塊 parser = argparse.ArgumentParser() # step2. 創建參數解析對象 parser.add_argument() # step3. 添加參數 """位置參數:parser.add_argument("echo", help="參數描述") 必選 可選參數: parser.add_argument("--verbosity", help="參數描述") 可選 """ args = parser.parse_args() # step4. 解析參數 """位置參數訪問:args.echo 可選參數訪問:args.verbosity """
def argsParser(): parser = argparse.ArgumentParser() parser.add_argument( "-t", type=str, default="train.txt", help="訓練文件名 - 支持相對路徑", ) args = parser.parse_args() return args.t
3. 數學函數庫:math
4. 隨機數:random
5. 多線程多進程:subprocess/multiprocessing/threading
6. 小工具(能減少代碼行數):itertools/operator/collections
6.1 collections
c = collections.Counter(參數) #參數可以是list、str、tuple、None等等 #作用:統計參數每個元素出現的次數 #返回:一個字典(元素作為key存儲,元素出現次數作為value存儲) #####例子: c = Counter('gallahad') # 輸出: Counter({'a': 3, 'd': 1, 'g': 1, 'h': 1, 'l': 2}) c.update('adc') # 在原來基礎上更新計數(直接修改c) # 輸出: Counter({'a': 4, 'c': 1, 'd': 2, 'g': 1, 'h': 1, 'l': 2}) c.most_common() # 輸出:[('a', 4), ('l', 2), ('d', 1), ('g', 1), ('b', 1), ('c', 1), ('h', 1)] # 相當於字典排序:sorted(c.items(), key=lambda asd:asd[1], reverse=True)
6.2 itertools
# 格式 itertools.chain(*iterables) #作用:將多個可迭代的對象轉換成一條鏈 a = [[1, 2, 3], ['a', 'b', 'c']] itertools.chain(a) # 結果: 1, 2, 3, 'a', 'b', 'c'
第三方庫
1. jieba
import jieba words = jieba.cut(字符串, cut_all=True) # 全模式分詞 (信息檢索中常用) words = jieba.cut(字符串, cut_all=False) # 精確模式分詞(默認) #支持並行分詞 jieba.enable_paralle(4) #支持自定義詞典 filename = '詞典路徑' jieba.load_userdict(filename)
#詞性標注
import jieba.posseg as pseg word = pseg.cut(' 我來到北京清華大學') for word, flag in words: print("%s %s"%(word, flag))