检索字符串值中小数点前的数字值

时间:2018-01-26 00:59:43

标签: c#

我正在研究C#中的例程

我有一个字母数字表格编号列表,我想检索小数字前的数字,以便在我的例行程序中使用。

FP10.01-->10
M1.01-->1
PP8.01-->8

如果可能的话,这样的事情怎么能以字符串或整数来实现呢?

先谢谢

4 个答案:

答案 0 :(得分:1)

您可以使用正则表达式:

Regex r = new Regex("([0-9]+)[.]");

string s = "FP10.01";

var result = Convert.ToInt32(r.Match(s).Groups[1].ToString()); //10

答案 1 :(得分:0)

要将结果元素累积到列表中,您可以执行以下操作:

List<string> myList = new List<string>(){ "FP10.01","M1.01", "PP8.01"};
List<int> resultSet = 
     myList.Select(e => 
             Regex.Replace(e.Substring(0, e.IndexOf('.')), @"[^\d]", string.Empty))
           .Select(int.Parse)
           .ToList();

这将采用myList中的每个元素,然后从索引0获取每个元素的子字符串,直到.,然后用{替换所有非数字数据{1}}然后最后将字符串元素解析为string.Empty并将其存储到列表中。

另一种变体是:

int

或者如果你想要元素是字符串,那么你可以这样做:

List<int> resultSet =
               myList.Select(e => e.Substring(0, e.IndexOf('.')))
                     .Select(e => string.Join(string.Empty, e.Where(char.IsDigit)))
                     .Select(int.Parse)
                     .ToList();

要检索List<string> resultSet = myList.Select(e => e.Substring(0, e.IndexOf('.'))) .Select(e => string.Join(string.Empty, e.Where(char.IsDigit))) .ToList(); 类型的单个元素,您可以创建一个辅助函数:

string

要检索类型为public static string GetValueBeforeDot(string input){ return input.Substring(0, input.IndexOf('.')) .Where(char.IsDigit) .Aggregate(string.Empty, (e, a) => e + a); } 的单个元素,则辅助函数应为:

int

答案 2 :(得分:0)

        string input = "FP10.01";
        string[] _input = input.Split('.');
        string num = find(_input[0]);

        public string find(string input)
        {
            char[] _input = input.ToArray();
            int number;
            string result = null;
            foreach (var item in _input)
            {                
                if (int.TryParse(item.ToString(), out number) == true)
                {
                    result = result + number;
                }
            }

            return result;
        }

答案 3 :(得分:0)

此方法通过用空字符串替换它们来删除字母字符。分裂&#39;。&#39;字符将为您留下一个由索引0处的数字和索引1处的十进制值组成的双元素数组。

string input = "FP10.01";
var result = Regex.Replace(input, @"([A-Za-z]+)", string.Empty).Split('.');
var beforeDecimalNumbers = result[0]; // 10
var afterDecimalNumbers = result[1];  // 01