<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          讓你的正則表達(dá)式可讀性提高一百倍

          共 4557字,需瀏覽 10分鐘

           ·

          2022-08-11 21:30

          ↑ 關(guān)注 + 星標(biāo) ,每天學(xué)Python新技能

          后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包

          作者:kingname
          來(lái)源:未聞 Code

          閱讀本文大概需要 4 分鐘。


          正則表達(dá)式這個(gè)東西,強(qiáng)大是強(qiáng)大,但寫出來(lái)跟個(gè)表情符號(hào)一樣。自己寫的表達(dá)式,過(guò)一個(gè)月來(lái)看,自己都不記得是什么意思了。比如下面這個(gè):

          pattern = r"((?:\(\s*)?[A-Z]*H\d+[a-z]*(?:\s*\+\s*[A-Z]*H\d+[a-z]*)*(?:\s*[\):+])?)(.*?)(?=(?:\(\s*)?[A-Z]*H\d+[a-z]*(?:\s*\+\s*[A-Z]*H\d+[a-z]*)*(?:\s*[\):+])?(?![^\w\s])|$)"

          有沒(méi)有什么辦法提高正則表達(dá)式的可讀性呢?我們知道,提高代碼可讀性的方法之一就是寫注釋,那么正則表達(dá)式能不能寫注釋呢?

          例如對(duì)于下面這個(gè)句子:

          msg = '我叫青南,我的密碼是:123kingname456,請(qǐng)注意保密。'

          我要提取其中的密碼123kingname456,那么我的正則表達(dá)式可能是這樣的:

          pattern = ':(.*?),'

          我能不能把它寫成這樣:

          pattern = '''
          :  # 開(kāi)始標(biāo)志
          (.*?)  #從開(kāi)始標(biāo)志的下一個(gè)字符開(kāi)始的任意字符
          ,  #遇到英文逗號(hào)就停止
          '''

          這樣寫就清晰多了,每個(gè)部分是什么作用全都清清楚楚。

          但顯然直接使用肯定什么都提取不到,如下圖所示:

          但我今天在逛 Python 正則表達(dá)式文檔[1]的時(shí)候,發(fā)現(xiàn)了一個(gè)好東西:

          使用它,可以讓你的正則表達(dá)式擁有注釋,如下圖所示:

          re.VERBOSE也可以簡(jiǎn)稱為re.X,如下圖所示:

          本文最開(kāi)頭的復(fù)雜正則表達(dá)式,使用了注釋以后,就會(huì)變得更可讀:

          pattern = r"""
          (                       # code (capture)
              # BEGIN multicode

              (?: \( \s* )?       # maybe open paren and maybe space

              # code
              [A-Z]*H  # prefix
              \d+      # digits
              [a-z]*   # suffix

              (?:                 # maybe followed by other codes,
                  \s* \+ \s*      # ... plus-separated

                  # code
                  [A-Z]*H  # prefix
                  \d+      # digits
                  [a-z]*   # suffix
              )*

              (?: \s* [\):+] )?   # maybe space and maybe close paren or colon or plus

              # END multicode
          )

          ( .*? )                 # message (capture): everything ...

          (?=                     # ... up to (but excluding) ...
              # ... the next code

              # BEGIN multicode

              (?: \( \s* )?       # maybe open paren and maybe space

              # code
              [A-Z]*H  # prefix
              \d+      # digits
              [a-z]*   # suffix

              (?:                 # maybe followed by other codes,
                  \s* \+ \s*      # ... plus-separated

                  # code
                  [A-Z]*H  # prefix
                  \d+      # digits
                  [a-z]*   # suffix
              )*

              (?: \s* [\):+] )?   # maybe space and maybe close paren or colon or plus

              # END multicode

                  # (but not when followed by punctuation)
                  (?! [^\w\s] )

              # ... or the end
              | $
          )
          """


          1. 10個(gè)python初學(xué)者常犯的錯(cuò)誤

          2. 來(lái)了,又一個(gè)新的SQL刷題網(wǎng)站!

          3. 4K壁紙批量采集,張張精品,全程自動(dòng)化



          參考資料

          [1] 

          正則表達(dá)式文檔: https://docs.python.org/3/library/re.html#re.VERBOSE   

          瀏覽 64
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  影音先锋每日av 影音先锋嫖娼视频 | 人人爱人人摸人人操 | www.国产视频在线观看 | 久久99无码精品亚洲日韩 | 免费在线观看亚洲视频 |