我正在嘗試逐行匹配以下序列:
- 行首
- 也許一些空間
- 該
Kd字串 - 至少一個空間,也許更多
- 3 或 4 個
float數字,其格式可能很亂 - 也許一些空間
- 行結束
問題是第 4 個樣本也被捕獲,即使它有 5 個數字。
圖案:
^\s*Kd\s .*(?:[- ]?0*\d*\.?\d*){3,4}$
樣品:
Kd 1.0 0.1 0.0
Kd .0 4. 01.
Kd .0 4. 01. 01.
Kd .0 4. 01. 01. 01.
Kd 1.0 0.1 0.0 0.0
Kd 1.0 0.1 0.0
預期捕獲:
- 1.0, 0.1, 0.0
- .0, 4., 01.
- .0, 4., 01., 01.
- 失敗
- 1.0, 0.1, 0.0, 0.0
- 1.0, 0.1, 0.0
題:
我在正則運算式中做錯了什么,所以它也匹配包含超過 4 個浮點數的行?
uj5u.com熱心網友回復:
主要問題是.*盡可能多地匹配除 LF 字符以外的任何零個或多個字符的部分。您還需要放入\s 重復組,以便在數值之間允許空格。
您可以使用
^\s*Kd(?:\s ([- ]?(?:\d*\.?\d |\d \.\d*))){3,4}$
請參閱.NET 正則運算式演示。詳情:
^- 字串的開始\s*- 零個或多個空格Kd- 一個固定的字串(?:\s ([- ]?(?:\d*\.?\d |\d \.\d*))){3,4}- 三到四次出現\s- 一個或多個空格([- ]?(?:\d*\.?\d |\d \.\d*))- 第 1 組:[- ]?- 一個可選的-或(?:\d*\.?\d |\d \.\d*)- 零個或多個數字,可選的.一個或多個數字,或一個或多個數字.和零個或多個數字
$- 字串的結尾。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363147.html
