正则表达式不匹配问题

时间:2015-09-22 00:59:37

标签: c# regex

我在识别字符串中的多个字符数字时遇到问题。

我要做的是从右到左检查第一个数字进行比较。

我原来的正则表达式:

Regex.Match(s, @"\d{3}", RegexOptions.RightToLeft);

这将匹配任何字符串中出现的前3位数字。例如:

  • hello123 - 输出:123
  • good234bye - 输出:234
  • see-you-456-tomorrow - 输出:456

不用担心。但是,现在我们不确定数字的长度,所以我们将正则表达式更改为:

Regex.Match(s, @"\d*", RegexOptions.RightToLeft);

这会查找第一个数字字符串,任意长度,并使用它。 然而,如果数字不在字符串的末尾,则返回空匹配。例如:

  • hello12 - 输出:12
  • 再见-1234-输出:1234
  • see-1-you-2-morrow - 输出:Nothing

如何查找字符串中第一个x长度的数字,从右到左并忽略任何非数字字符,而不返回空匹配?

2 个答案:

答案 0 :(得分:0)

你能试试吗?我是Regex的新手,但我觉得它适合你!

 var s =    @"see-you-456-tomorrow";
            var r = Regex.Match(s, @"[[\d]]*\d*", RegexOptions.RightToLeft);
            Console.WriteLine(r);

您可以看到它正常工作here

答案 1 :(得分:0)

量词

重复一次或多次的数字

\d+

数字从3次重复到5次

\d{3,5}

重复至少5次的数字

\d{5,}

您可以在this tutorial

中详细了解量词

你可能已经意识到,

              see-1-you-2-morrow
                                ^
                                |
\d* matches an empty position (here)
    between the last character and the end of string