簡體   English   中英

使用 C# 的正則表達式匹配(簡單??)正則表達式

[英]Matching an (easy??) regular expression using C#'s regex

好的,抱歉,這似乎是一個愚蠢的問題,但我無法弄清楚:

我正在嘗試解析一個字符串,只是想檢查它是否只包含以下字符:'0123456789dD+'

我已經嘗試了很多東西,但就是無法弄清楚要使用的正確正則表達式!


  Regex oReg = new Regex(@"[\d dD+]+");
  oReg.IsMatch("e4");

即使不允許 e 也會返回 true ......我嘗試了很多字符串,包括 Regex("[1234567890 dD+]+") ...

它始終適用於Regex Pal,但不適用於 C#...

請提供建議,我再次道歉,這似乎是一個非常愚蠢的問題

試試這個:

@"^[0-9dD+ ]+$"

開頭和結尾的^$分別表示輸入字符串的開頭和結尾。 因此在開始和結束之間只允許指定的字符。 在您的示例中,如果字符串包含其中一個字符,則正則表達式匹配,即使它也包含其他字符。

@comments:謝謝,我修復了缺少的+和空格。

糟糕,您忘記了界限,請嘗試:

Regex oReg = new Regex(@"^[0-9dD +]+$");
oReg.IsMatch("e4");

^ 匹配文本流的開頭, $ 匹配文本流的結尾。

它匹配 4; 如果您想要整個字符串的完整匹配,您需要 ^ 和 $ 來終止正則表達式 - 即

    Regex re = new Regex(@"^[\d dD+]+$");
    Console.WriteLine(re.IsMatch("e4"));
    Console.WriteLine(re.IsMatch("4"));

這是因為正則表達式也可以匹配輸入的部分,在這種情況下它只匹配“e4”的“4”。 如果要匹配整行,則必須用“^”(匹配行開頭)和“$”(匹配行結尾)將正則表達式括起來。

因此,要使您的示例工作,您必須編寫如下:

Regex oReg = new Regex(@"^[\d dD+]+$");
oReg.IsMatch("e4");

我相信它返回 True 是因為它找到了 4。正則表達式中沒有任何內容從結果中排除字母 e。

另一種選擇是反轉所有內容,因此它匹配您不想允許的字符:

Regex oReg = new Regex(@"[^0-9dD+]");
!oReg.IsMatch("e4");

暫無
暫無

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

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