我使用這個正則表達式來驗證文本框中的科學記數法,但它不起作用。這不允許鍵入任何內容。有人能告訴我爲什麼這個正則表達式不起作用嗎?
regex = new Regex("[-+]?(0?|[1-9][0-9]*)(\\.[0-9]*[1-9])?([eE][-+]?(0|[1-9][0-9]*))?");
在此先感謝。
我使用這個正則表達式來驗證文本框中的科學記數法,但它不起作用。這不允許鍵入任何內容。有人能告訴我爲什麼這個正則表達式不起作用嗎?
regex = new Regex("[-+]?(0?|[1-9][0-9]*)(\\.[0-9]*[1-9])?([eE][-+]?(0|[1-9][0-9]*))?");
在此先感謝。
的問題是,你的正則表達式匹配空字符串。一個簡單的解決方案可以是在前面添加^
,在末尾添加$
以要求整個輸入字符串與正則表達式匹配。
這裏是一個小測試:
var numbers = new[] {
"0", "1", "01", "+1", "-1", "+0", "-0", "1.9", "1.09", "1.90", "1e0", "1e01", "1e10"
};
var regex = new Regex("^[-+]?(0?|[1-9][0-9]*)(\\.[0-9]*[1-9])?([eE][-+]?(0|[1-9][0-9]*))?$");
var valid = numbers
.Select(n => regex.Match(n))
.Where(m => m.Success)
.Select(m => m.Value);
打印出valid
的元素會導致如下:
0
1
+1
-1
+0
-0
1.9
1.09
1e0
1e10
注意如何01
,1.90
和1e01
不匹配,但我猜這是故意的。
這裏的,我覺得非常有用的另一個測試儀:http://gskinner.com/RegExr/ 如果你只是尋找匹配包括科學記數法,同時捕獲指數浮點數,那麼試試這個:[ - +] [0-9] ?* [0-9] +([EE] [ - +] [0-9] +?)? (從http://www.regular-expressions.info/floatingpoint.html)
[-+]?(0|[1-9])[0-9]*([.][0-9]*)?([eE][-+]?(0|[1-9])[0-9]*)?
是稍微接近於你想要什麼....但也許如果你給一個測試組你希望通過表情,這將有助於/失敗
您是否嘗試過使用Darek Slager的.NET Regex測試器來解決表達式問題? http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx –
如果您發佈應該/不應該通過的示例,可能會有所幫助。 – RobinGower
+你是如何實際使用正則表達式的例子 - 你正在測試以查看是否有不匹配的字符,或者整個字符串必須匹配,還是..? – Dexter