3

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

一些随机文本,参考编号: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;
}

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

4

1 回答 1

3

您正在寻找一些以字符串“Supp-”开头的数字。这可以翻译成正则表达式,如

(<=Supp-)\d+

你会像myIssueId = Regex.Match(input, "(<=Supp-)\d+").Value.

于 2013-08-12T12:07:30.923 回答