精品国产亚洲一区二区三区|亚洲国产精彩中文乱码AV|久久久久亚洲AV综合波多野结衣|漂亮少妇各种调教玩弄在线

<blockquote id="ixlwe"><option id="ixlwe"></option></blockquote>
  • <span id="ixlwe"></span>

  • <abbr id="ixlwe"></abbr>

    python的正則(二):一些高級用法

    正則基礎(chǔ)請閱讀:

    python的正則(一):簡單夠用的basic版

    以下部分不學也問題不大,不用焦慮。

    特殊字符

    (?aiLmsux) 等價于re.A, re.I, re.L, re.M, re.S, re.U, re.X

    (?:...) 不分組

    (?aiLmsux-imsx:...) 去除少量模式

    (?P<name>...) 給分組起個名字

    (?P=name) 按名字引用

    (?#...) 只是個注釋

    (?=...) 后面包含

    (??。?后面不包含

    (?<=...) 前面包含

    (?<!...) 前面不包含

    (?(id/name)yes-pattern|no-pattern) yes pattern不滿足時,再匹配no pattern

    一些例子:

    #1. 不區(qū)分大小寫

    re.findall(r'(?i)abc', 'abcABCabc') #['abc', 'ABC', 'abc']

    等同于:

    re.findall(r'abc', 'abcABCabc', re.I)

    #2. 給分組起個名字,看起來比更容易閱讀

    m = re.search(r'.(?P<port>w+)s*((?=port))', '.a(chǎn)bc (abc),')

    print(m.group('port') # abc

    print(m.group(0)) # .a(chǎn)bc (abc)

    #3. 向前看

    m = re.search(r'(?<=inputswires)(?P<input>w+)', 'input wire abc')

    print(m.group('input') # abc

    #4. 正則不滿足時,嘗試匹配另外一個正則

    m = re.search(r'(output)?s+(?(1)reg|wire)s+(w+)', 'output reg abc')

    print(m.group(2)) # abc

    m = re.search(r'(output)?s+(?(1)reg|wire)s+(w+)', 'input wire abc')

    print(m.group(2)) # abcre的幾個函數(shù)re.escape

    re.escape(pattern),自動把特殊字符轉(zhuǎn)義。

    print(re.escape('[7:0]')) # [7:0]re.compile

    re.compile(pattern, flags=0),正則編譯,一次編譯可以多處使用,加快正則執(zhí)行速度。

    re.finditer

    re.finditer(pattern, string, flags=0),返回iterator,就是可以用for循環(huán)依次處理的數(shù)據(jù)類型,還可以獲得每個匹配字符串的開始start()和結(jié)束end()位置。例如,

    s = """

    input wire a,

    input wire b,

    output wire c,

    output wire d

    """

    m = re.finditer(r'(?:input|output)s+wires+(w+)', s)

    for i in m:

    print("start=", i.start(), "end=", i.end(), "match=", i.group(1))

    # start= 1 end= 13 match= a

    # start= 15 end= 27 match= b

    # start= 29 end= 42 match= c

    # start= 44 end= 57 match= dre.sub處理復(fù)雜的查找替換

    re.sub(pattern, repl, string, count=0, flags=0) 的repl不僅僅可以是字符串,也可以是一個函數(shù)。例如,下面是一個改變端口順序的正則例子,

    s = """

    module test

    (a, b, c, d, e);

    //...

    endmodule

    """

    def rep(m):

    # 獲取待處理的字符串

    s1 = m.group(0)

    # 一大堆復(fù)雜的處理

    port = re.search(r'((.*))', s1).group(1)

    port = port.strip()

    port = re.sub('s+', "", port)

    port_list = port.split(',')

    port_list = port_list[::-1];

    s2 = re.sub(r'(?<=().*(?=))', ','.join(port_list), s1)

    # 返回處理完的字符串,用于替換

    return s2

    s3 = re.sub(r'module.*?;', rep, 0, re.S)

    print(s3)

    #module test

    # (e,d,c,b,a);

    # //...

    #endmodule

    (免責聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關(guān)資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負任何法律責任。
    任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )

    贊助商
    2020-07-14
    python的正則(二):一些高級用法
    正則基礎(chǔ)請閱讀:python的正則(一):簡單夠用的basic版以下部分不學也問題不大,不用焦慮。

    長按掃碼 閱讀全文