1. 程式人生 > 實用技巧 >statistics of Python

statistics of Python

#!/usr/bin/python
# coding: utf-8
import re

'''
.                    匹配任意字元(不包括換行符)
^                    匹配開始位置,多行模式下匹配每一行的開始
$                    匹配結束位置,多行模式下匹配每一行的結束
*                    匹配前一個元字元0到多次
+                    匹配前一個元字元1到多次
?                    匹配前一個元字元0到1次
{m,n}                匹配前一個元字元m到n次
\\                   轉義字元,跟在其後的字元將失去作為特殊元字元的含義,例如\\.只能匹配.,不能再匹配任意字元
[]                   字符集,一個字元的集合,可匹配其中任意一個字元
|                    邏輯表示式 或 ,比如 a|b 代表可匹配 a 或者 b
(...)                分組,預設為捕獲,即被分組的內容可以被單獨取出,預設每個分組有個索引,從 1 開始,按照"("的順序決定索引值
(?iLmsux)            分組中可以設定模式,iLmsux之中的每個字元代表一個模式,用法參見 模式 I
(?:...)              分組的不捕獲模式,計算索引時會跳過這個分組
(?P<name>...)        分組的命名模式,取此分組中的內容時可以使用索引也可以使用name
(?P=name)            分組的引用模式,可在同一個正則表示式用引用前面命名過的正則
(?#...)              註釋,不影響正則表示式其它部分,用法參見 模式 I
(?=...)              順序肯定環視,表示所在位置右側能夠匹配括號內正則
(?!...)              順序否定環視,表示所在位置右側不能匹配括號內正則
(?<=...)             逆序肯定環視,表示所在位置左側能夠匹配括號內正則
(?<!...)             逆序否定環視,表示所在位置左側不能匹配括號內正則
(?(id/name)yes|no)   若前面指定id或name的分割槽匹配成功則執行yes處的正則,否則執行no處的正則
\number              匹配和前面索引為number的分組捕獲到的內容一樣的字串
\A                   匹配字串開始位置,忽略多行模式
\Z                   匹配字串結束位置,忽略多行模式
\b                   匹配位於單詞開始或結束位置的空字串
\B                   匹配不位於單詞開始或結束位置的空字串
\d                   匹配一個數字, 相當於 [0-9]
\D                   匹配非數字,相當於 [^0-9]
\s                   匹配任意空白字元, 相當於 [ \t\n\r\f\v]
\S                   匹配非空白字元,相當於 [^ \t\n\r\f\v]
\w                   匹配數字、字母、下劃線中任意一個字元, 相當於 [a-zA-Z0-9_]
\W                   匹配非數字、字母、下劃線中的任意字元,相當於 [^a-zA-Z0-9_]
'''

def testdote():
    str1 = 'hello<b><b><hb> <strong> </strong> <h1>world</h1>'
    print(re.sub(r"<.*?>",'09',str1))#hello09 09 09 09world09
    print(re.sub(r"<strong>",'09',str1))#hello09 <strong> <strong> <h1>world</h1>
    print(re.sub(r"<[^>]+>",'x',str1))#helloxxx x x xworldx-
    print(re.sub(r"<[^strong]+>",'x',str1))#hellox <strong> <strong> xworldx
    print(re.sub(r"<[^h1]+>",'x',str1))#hellox<hb> x <h1>world</h1>

    str = "ab123ba4b56b"
    # + 匹配前一個元字元1到多次
    # ? 匹配前一個元字元0到1次
    print(re.sub(r"a(.?)b","-",str))#-123b-56b
    print(re.sub(r"[ab123]",'=',str))#=======4=56=
    print(re.sub(r"[^ab123$]",'.',str))#ab123ba.b..b
    print(re.findall(r"a(.+?)b", str))#['b123', '4']
    print(re.findall(r"a(.?)b", str))#['', '4']
    print(re.findall(r"a(.+)b", str))#['b123ba4b56']
    print(re.findall(r"a(.*)b", str))#['b123ba4b56']
    print(re.findall(r"a(.{1,3})b", str))#['4']
    print(re.findall(r"a(.{1,4})b", str))#['b123', '4b56']
    print(re.findall(r"a(.{1,10})b", str))#['b123ba4b56']
    print(re.findall(r"a|b", str))#['a', 'b', 'b', 'a', 'b', 'b']
    print(re.sub(r"a|b","x",str))#xx123xx4x56x
    print(re.sub(r"[^12$]","-",str))# --12--------

testdote()