簡體   English   中英

不知道為什么我無法在C#中匹配這個正則表達式

[英]Not sure why I can't match this regex in C#

我正在嘗試將字符串“9月12日”與以下C#代碼匹配。 但它不匹配,我不知道為什么。 我究竟做錯了什么? 它似乎適用於regexpal.com

public static void Scan(String str)
    {
        String digits = "(0|1|2|3|4|5|6|7|8|9)";

        String r1 = "September " + digits + "+";

        foreach (Match match in Regex.Matches(str, r1, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace))
        {
            String value = match.Value;
        }


    }

問題是標志RegexOptions.IgnorePatternWhitespace。 刪除它,因為你不想忽略正則表達式中的空格 - 你需要它來匹配“九月”和“19”之間的空格。

提示: digits可以更容易寫為[0-9]。 一個更好的正則表達式將是

September [0-9]+

正如@Moritz指出你不匹配因為你忽略了空白。 您還應該注意,您當前的方法將匹配無效的各種“日期”。 例如, September 67

我建議使用稍微復雜的模式來匹配數字模式:

September ([1-9]|[12][0-9]|3[01])

這將數字限制在1到31之間。雖然這仍然允許一些無效日期(例如September 31 ),但它將極大地限制匹配的無效日期的數量。

@“九月\\ s \\ d +”應該這樣做

\\ s匹配一個空格,\\ d匹配任何數字,+是前面的1或更多。

你可以這樣試試。

public static void Scan(String str)
{
  // This regex is pretty nasty, I would probably take more time to refine it.
  String patt = @"^([A-Za-z]+)(\s)(\d+)$";

  foreach (Match match in Regex.Matches(str, patt, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace))
  {
    String value = match.Value;

    Console.WriteLine(value);
  }
}

...

然后稱之為:

Scan("September 2011");

暫無
暫無

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

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