在C#中从字符串中获取数字

4
我正在爬取一些网站内容,它看起来像这样:"公司股票 Rs. 7100"

现在,我想从这个字符串中提取数字值。我尝试了分割但是我的正则表达式总是出现错误。
请告诉我如何获取这个值。

1
数字总是在字符串的末尾吗? - Derek Harrington
1
数字总是在末尾吗?文本总是“公司股票”吗? - Rob Levine
@RobLevine。这有什么区别吗?他不仅仅想要最后的数字。 - gdoron
3
请提供你尝试过的代码,经过117个问题和近2500个声望的积累,你应该知道一些常见错误。但是你的正则表达式可能出了点问题。 - adelphus
@adelphus,我真的很不擅长正则表达式。总是想去学习,但不知道为什么每次都跳过每种语言中的正则表达式章节。非常抱歉这是一个非常基础的问题。 - Pankaj Upadhyay
显示剩余2条评论
7个回答

15

使用:

var result = Regex.Match(input, @"\d+").Value;

如果你想在字符串中查找最后一个“实体”的数字,你应该使用这个正则表达式:

\d+$

如果你想匹配字符串中的最后一个数字,可以使用:

\d+(?!\D*\d)

5
int val = int.Parse(Regex.Match(input, @"\d+", RegexOptions.RightToLeft).Value);

5

我一直喜欢LINQ

var theNumber = theString.Where(x => char.IsNumber(x));    

尽管 正则表达式 听起来像是本地选择...


@KirillPolishchuk。你说得对,我刚刚将它删除了... =)谢谢 - gdoron
1 a 2 这样的字符串怎么处理? - Kirill Polishchuk
@KirillPolishchuk。你会得到12。我写的是Regex是本地选择。我只是展示了另一种使用LINQ的方法。(如果你的意思是这样,我会使用Regex...) - gdoron
但是这会返回IEnumerable<char>()而不是一个字符串,对吗? - Flowerking
1
@Flowerking。我认为你可以写new string(theString)来将它转换成字符串。 - gdoron
可以写成 theString.Where(char.IsNumber); - aloisdg

1

此代码将返回字符串末尾的整数。如果字符串中的某个位置有数字,则此方法比正则表达式更有效。

    public int getLastInt(string line)
    {
        int offset = line.Length;
        for (int i = line.Length - 1; i >= 0; i--)
        {
            char c = line[i];
            if (char.IsDigit(c))
            {
                offset--;
            }
            else
            {
                if (offset == line.Length)
                {
                    // No int at the end
                    return -1;
                }
                return int.Parse(line.Substring(offset));
            }
        }
        return int.Parse(line.Substring(offset));
    }

“这种方法比正则表达式更好的地方在于,当字符串中有其他数字时,它可以更好地工作。” - 从什么意义上说呢?我们可以轻松地编写一个正则表达式,只匹配字符串末尾的数字。 - Rob Levine

1

这是我的回答...它使用C#将数字和字符串分开...

    static void Main(string[] args)
    {
        String details = "XSD34AB67";
        string numeric = "";
        string nonnumeric = "";
        char[] mychar = details.ToCharArray();
        foreach (char ch in mychar)
        {
            if (char.IsDigit(ch))
            {

                numeric = numeric + ch.ToString();
            }
            else
            {
                nonnumeric = nonnumeric + ch.ToString();
            }
        }

        int i = Convert.ToInt32(numeric);
        Console.WriteLine(numeric);
        Console.WriteLine(nonnumeric);
        Console.ReadLine();



    }
}

}


1
如果您的数字总是在最后一个空格之后,且您的字符串总是以此数字结尾,您可以通过以下方式获取它:
str.Substring(str.LastIndexOf(" ") + 1)

0

您可以使用\d+来匹配第一个数字的出现:

string num = Regex.Match(input, @"\d+").Value;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接