捕获可变长度的子字符串引用号

时间:2013-08-12 12:00:51

标签: c# regex

对于一个小问题我有一个简单的解决方案,但作为一个新手开发者,我总是想学习更正确/更好的方法来做某事。目前,我得到一个看起来或多或少像这样的字符串...

  

一些随机文本,参考编号:Supp-1234以及一些更随机的文本......

现在,如果我们假设这种情况并且我们只想获得参考编号的数字部分,我们可以这样做......

int firstCharacter = mystring.IndexOf("Supp-", StringComparison.InvariantCultureIgnoreCase);
myIssueId = firstCharacter != -1 ? mailItem.Subject.Substring(firstCharacter + 5, 4) : "";

但是现在,假设我们得到一个参考号Supp-12345,现在这不会起作用。你可以试试这样的......

int firstCharacter = mystring.IndexOf("Supp-", StringComparison.InvariantCultureIgnoreCase);
if (firstCharacter != -1)
{
    string temp = mystring.Substring(firstCharacter + 5, 5);
    try
    {
        int x = Convert.ToInt32(temp); // to ensure it is indeed a number
    }
    catch (Exception)
    {
        temp = mystring.Substring(firstCharacter + 5, 4); // it is 4 digits, not 5
    }
    myIssueId = temp;
}

现在我的问题是这个。如何改进此代码?它对我来说有点太乱了。任何想法将不胜感激。

1 个答案:

答案 0 :(得分:3)

您正在寻找一些前面带有字符串“Supp-”的数字。这可以转换为正则表达式,如

(<=Supp-)\d+

您可以像myIssueId = Regex.Match(input, "(<=Supp-)\d+").Value一样使用它。