2

我检查我的字符串是否以数字开头

if(RegEx(IsMatch(myString, @"\d+"))) ...

如果这个条件成立,我想得到我的字符串开头的这个“数字”子字符串的长度。

如果每个下一个字符都是从第一个字符开始并增加一些计数器的数字,我可以找到长度检查。有没有更好的方法来做到这一点?

4

6 回答 6

6

好吧,而不是 using IsMatch,您应该找到匹配项:

// Presumably you'll be using the same regular expression every time, so
// we might as well just create it once...
private static readonly Regex Digits = new Regex(@"\d+");

...

Match match = Digits.Match(text);
if (match.Success)
{
    string value = match.Value;
    // Take the length or whatever
}

请注意,这不会检查数字是否出现在字符串的开头。您可以使用@"^\d+"which 将匹配锚定到开头。或者,如果您愿意,可以检查它match.Index是否为 0...

于 2012-06-02T19:02:34.567 回答
4

要检查我的字符串是否以数字开头,您需要使用 pattern ^\d+

string pattern = @"^\d+";
MatchCollection mc = Regex.Matches(myString, pattern);
if(mc.Count > 0)
{
  Console.WriteLine(mc[0].Value.Length);
}
于 2012-06-02T19:05:00.957 回答
3

您的正则表达式检查您的字符串是否包含一个或多个数字的序列。如果要检查它是否以它开头,则需要在开头锚定它:

Match m = Regex.Match(myString, @"^\d+");
if (m.Success)
{
    int length = m.Length;
}
于 2012-06-02T19:04:19.217 回答
1

作为正则表达式的替代方法,您可以使用扩展方法:

int cnt = myString.TakeWhile(Char.IsDigit).Count();

如果字符串的开头没有数字,您自然会得到零计数。否则你有位数。

于 2012-06-02T19:20:11.460 回答
0

不仅要检查IsMatch,还要获取匹配项,以便获取有关它的信息,例如长度:

var match = Regex.Match(myString, @"^\d+");
if (match.Success)
{
    int count = match.Length;
}

另外,我^在模式的开头添加了 a 以将其限制在字符串的开头。

于 2012-06-02T19:02:29.287 回答
0

如果您对代码进行更多分解,则可以利用Regex.Match

var length = 0;

var myString = "123432nonNumeric";
var match = Regex.Match(myString, @"\d+");

if(match.Success)
{
    length = match.Value.Length;
}
于 2012-06-02T19:03:09.177 回答