我正在嘗試匹配以下模式:
((1.0 4) (2.0 5) .... (10.0 8))
元組(X N),其中X是帶有可選指數的浮點數, N 是整數,可以重復多次。
我在這個網站上試過,我可以為固定數量的元組生成一個正則運算式。例如對于 2 個元組,我會得到
^\(\(([ -]?(?=\.\d|\d)(?:\d )?(?:\.?\d*))(?:[eE]([ -]?\d ))?\s[0-9] \)\s\(([ -]?(?=\.\d|\d)(?:\d )?(?:\.?\d*))(?:[eE]([ -]?\d ))?\s[0-9] \)\)$
如何修改模式以使元組的數量是任意的?我想我將不得不使用某種分組,但正則運算式對我來說很新。
uj5u.com熱心網友回復:
您可以使用以下模式:
^\(\(\d (?:\.\d )? \d \)(?:\s*\(\d (?:\.\d )? \d \))*\)$
演示
此模式匹配:
^
\( (
\(\d (?:\.\d )? \d \) a leading tuple
(?:\s*\(\d (?:\.\d )? \d \))* space, more tuples
\) )
$
uj5u.com熱心網友回復:
“元組 (XN),其中X是具有可選指數的浮點數,N是整數,可以重復多次。”
為確保您有 1 個元組(帶有可選指數),您可以使用:
^\(\([- ]?\d*\.\d ([eE][- ]?\d )?\s\d \)(?:\s\([- ]?\d*\.\d ([eE][- ]?\d )?\s\d \))*\)$
查看在線演示
^- 起跑線錨;\(\(- 兩個字面左括號;[- ]?\d*\.\d ([eE][- ]?\d )?- 為了將您的浮點數與可選指數匹配,我們匹配:可選的連字符或加號,后跟 0 數字和帶 1 數字的文字點。之后是一個可選的捕獲組,用于將指數與字母“e”、可選的連字符或加號以及 1 數字匹配;\s\d \)- 要完成模式匹配的元組:單個空格字符和 1 位以匹配右括號之前元組的整數部分;(?:\s.....)*- 下面的技巧是我們使用非捕獲組來匹配單個空白字符和我們用于元組的模式。關閉此非捕獲組時,匹配它 0 次以允許任意數量的元組;\)$- 用文字結束括號和結束線錨點完成模式。
或者,如果可用,捕獲捕獲組中的第一個元組并使用反向參考重復該確切模式:
^\((\([- ]?\d*\.\d ([eE][- ]?\d )?\h\d \))(?:\h(?1))*\)$
查看在線演示
uj5u.com熱心網友回復:
您可以通過將字串與以下正則運算式匹配來驗證模式。
^\((?:\(\d \.\d(?: \d )?\)(?: |(?=\)$))) \)$
演示
正則運算式可以分解如下。
^ # match beginning of string
\( # match '('
(?: # begin non-capture group
\( # match '('
\d \.\d # match 1 digits, '.', 1 digit
(?: \d )? # optionally ('?') match a space then 1 digits
\( # match ')'
(?: # begin non-capture group
[ ] # match a space
| # or
(?=\)$) # positive lookahead asserts next char is ')' at end of string
) # end non-capture group
) # end non-capture group and execute one or more times
\) # match ')'
$ # match end of string
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/426755.html
標籤:javascript 正则表达式 红宝石 正则表达式组
上一篇:用N個字符替換行首的N個空格
