簡體   English   中英

簡單的C#正則表達式問題

[英]Simple C# regex question

問題 :如果給定Regex匹配整個字符串,如何測試的最簡單方法是什么?

一個例子:例如,給定Regex re = new Regex("."); 我想測試給定的輸入字符串是否只有一個字符使用此正則表達式re 我怎么做 ?

換句話說 :我正在尋找類Regex方法,它類似於Java類Matcher中的方法matches() (“嘗試將整個區域與模式匹配。”)。

編輯: 這個問題不是關於獲取某些string長度。 問題是如何將整個字符串與常規表達式匹配。 此處使用的示例僅用於演示目的(通常每個人都會檢查Length屬性以識別一個字符串)。

如果你被允許改變正則表達式,你應該用^( ... )$來包圍它。 您可以在運行時執行此操作,如下所示:

string newRe = new Regex("^(" + re.ToString() + ")$");

這里的括號是必要的,以防止創建像^a|ab$這樣的正則表達式,它不會做你想要的。 此正則表達式匹配以a開頭a任何字符串或以ab結尾的任何字符串。


如果您不想更改正則表達式,可以檢查Match.Value.Length == input.Length 這是ASP.NET正則表達式驗證器中使用的方法。 在此處查看我的答案以獲得更全面的解釋。

請注意,此方法可能會導致一些您應該注意的奇怪問題。 正則表達式“a | ab”將匹配字符串'ab',但匹配的值將僅為“a”。 因此即使這個正則表達式可以匹配整個字符串,它也沒有。 文檔中有關於此的警告。

使用錨定模式

Regex re = new Regex("^.$");

測試字符串的長度我會檢查.Length屬性雖然( str.Length == 1 )...

"b".Length == 1

是一個比...更好的候選人

Regex.IsMatch("b", "^.$")

您添加“字符串開頭”和“字符串結束”錨點

^.$

暫無
暫無

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

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