簡化這個重複的正則表達式

大衛542

我有以下有效的正則表達式來匹配不同的excel細胞/範圍模式,形式的A1A1:Z12等。

在此處輸入圖片說明

有沒有更緊湊的方式來進行比賽的第二部分?基本上,: <repeat>我希望能夠通過以下方式完成部分:

  • ^ (<main_part> ':'<lookahead, keep if before an A-Z> ){1,2} $

有什麼辦法可以做到這種模式?

卡西米爾和希波呂忒

一種沒有捕獲組或環視的方法,使用詞邊界:

^(?:\b:?[A-Z]{1,3}[0-9]{1,10}){1,2}$

演示

字邊界不能在字符串的開頭和冒號之間,也不能在數字和字母之間成功,但在數字和冒號之間或字符串的開頭和字母之間可以。

顯然,出於同樣的原因,也可以這樣做:

^(?:[A-Z]{1,3}[0-9]{1,10}:?\b){1,2}$

(你用這個多贏一步,耶!)


測試用例(第一種模式):

  1. with:A2
    它失敗,因為\b在字符串的開頭和非單詞字符(冒號)之間失敗

  2. withA2:
    它失敗,因為子模式末尾沒有冒號(在這種情況下不會重複)。

  3. withA2:A2
    模式成功。\b成功是因為第一次它在字符串的開頭和一個字母(一個單詞字符)之間,第二次因為它在一個數字(一個單詞字符)和一個冒號(一個非單詞字符)之間。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何用正則表達式替換自身的 n 個重複項?

規則的正則表達式“前後不能有這個字符”

正則表達式重複可選組

正則表達式重複可選組

Lua 中的重複正則表達式

為什麼這個正則表達式返回字符而不是換行符

我該如何解決這個正則表達式邏輯錯誤?

我該如何解決這個正則表達式的問題?

這裡應該使用哪個正則表達式?

這個正則表達式在 Entrypoint.sh 中做什麼?

是否有正則表達式來替換這個 if 條件

重複字符 X 次,但不計算中間的 Y 個字符(正則表達式)

如何在 Bigquery 中使用交叉連接優化重複的正則表達式

為什麼這個正則表達式模式只返回最後一個實例?

我應該如何使這些正則表達式捕獲組更簡潔?

如何調整這個駝峰正則表達式以允許首字母縮略詞?

字符串上的簡單正則表達式

如何為重複模式創建正則表達式?

如何在正則表達式中重複組後檢查破折號

如何使用正則表達式在字符串中查找重複的單詞

使用正則表達式檢查連續重複的確切次數

有沒有更好的方法來編寫這個非常長的正則表達式,或者執行這個錯誤檢查?

複雜的正則表達式(換行符,多個變量)

正則表達式將字符串中的第一個非重複字符捕獲到捕獲組中

合併兩個正則表達式

一個詞的 Python 正則表達式

正則表達式匹配多個模式

哪個更快?修剪()或正則表達式?

正則表達式排除某個模式