溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

用中文API讓正則表達(dá)式更易讀寫的方法是什么

發(fā)布時間:2021-10-23 11:41:08 來源:億速云 閱讀:137 作者:iii 欄目:編程語言

這篇文章主要講解了“用中文API讓正則表達(dá)式更易讀寫的方法是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“用中文API讓正則表達(dá)式更易讀寫的方法是什么”吧!

Python實現(xiàn):

標(biāo)識符:r'\$?[_a-zA-Z\u4e00-\u9fa5][_a-zA-Z0-9\u4e00-\u9fa5]*'  

雙引號字符串: r'(\")((?<!\\)\\\1|.)*?\1'

字符串插值相關(guān):r'\\\(([^\\\)]*)\\\)|`([^`]*)`'

由此想到是否有 API 能夠構(gòu)建正則表達(dá)式。找到 PythonVerbalExpressions,它首頁上一個示例如下:

verbal_expression.
start_of_line().
find('http').
maybe('s').
find('://').
maybe('www.').
anything_but(' ').
end_of_line()

對應(yīng)正則: ^(http)(s)?(\:\/\/)(www\.)?([^\ ]*)$

看起來的確比較可讀,而且如果改為中文 API 的話,命名會更簡短:

開頭().
尋找('http').
或許('s').
尋找('://').
或許('www.').
除了(' ').
結(jié)尾()

問題是這個庫的功能似乎有限,僅支持小部分正則語法,于是考慮改進。

設(shè)想中的 API 示例

以開頭的木蘭實現(xiàn)中的幾個正則為例,用設(shè)想中的 API 表達(dá)后進行對比

標(biāo)識符:

至多一個("$").一個("_", 大小寫英文, 中文).任意個("_", 大小寫英文, 數(shù)字, 中文)

原始正則表達(dá)式對比:r'\$?[_a-zA-Z\u4e00-\u9fa5][_a-zA-Z0-9\u4e00-\u9fa5]*'

雙引號字符串:

分組(雙引號)
  .最小匹配(
    任意個(
      分組(
        皆可(
          前面不是(反斜杠).一個(反斜杠).一個(引用分組(1)),
          一個(非換行字符))
      )
    )
  )
  .引用分組(1)

r'(\")((?<!\\)\\\1|.)*?\1'

字符串插值相關(guān):

皆可(
  一個(反斜杠).一個(左小括號).分組(任意個(不是(反斜杠, 右小括號))).一個(反斜杠).一個(右小括號),
  一個(反引號).分組(任意個(不是(反引號))).一個(反引號)
)

r'\\\(([^\\\)]*)\\\)|`([^`]*)`'

相對原始正則表達(dá)式,在可讀性之外還有幾個優(yōu)勢:

  • 不需為正則的特殊意義字符加反斜杠,如 \,(,) 等

  • 明確運算優(yōu)先級,比如雙引號字符串中的 | 和 (?<!)...

在易寫方面,相對于正則的符號語法,API 語義更加直白。

感謝各位的閱讀,以上就是“用中文API讓正則表達(dá)式更易讀寫的方法是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對用中文API讓正則表達(dá)式更易讀寫的方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI