簡體   English   中英

帶有負面外觀的十進制或整數

[英]Decimal or integer with negative look behind

我有以下簡單的負面看法

(?<![Ø]\s*)

以下表達式匹配整數或小數,無論是否包含整數部分

([0-9]*(?:[.,][0-9]+)?)     

第二個表達式匹配8 8.8 8,8 .8 ,88 etc..

我試圖結合2個表達式來忽略第二個表達式的整個匹配,以防它的前面是Ø ,所以我做了

(?<![Ø]\s*)([0-9]*(?:[.,][0-9]+)?)

和那些測試的價值

88.88
88,88
,88
.5
Ø    .8
Ø  8.8

前4個值按預期匹配,但最后2個的一部分得到部分匹配,我預計它根本不匹配,有人可以告訴我缺少什么嗎?

你可以試試這個

(?<![Ø]\s*|[.,\d])(?=[\d.,]{1,})([0-9]*(?:[.,][0-9]+)?)
             ^^
             ||

regexstorm演示

一個更簡單的版本由bobble bubble建議

(?<!Ø\s*|[.,\d])(\d*[.,]?\d+)

總是更好地解釋SO的答案。 所以我們走了:問題是表達式實際上可以匹配字符串中的任何位置 因此,如果測試用例在匹配中有多個字符可能會失敗,那么匹配將啟動一個字符並匹配其余字符。 鑒於給定的表達式可以匹配一些空白字符串,更是如此。 做事的最佳方式是:

  1. 添加一個檢查以確保匹配至少有一個數字,並且
  2. 添加一個檢查以確保它處於潛在匹配的開始。

這兩個都可以用負面的后視來完成。 因此: (?<!Ø\\s*[.,\\d]*)\\d*[.,]?\\d+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM