从字符串中获取第一个数字

时间:2018-06-07 15:48:42

标签: c# regex substring

我有一个字符串

  

99CZIAKUOTA PIV 1,21 SUMA 12,36otóuka2| 0350 | tKasa 1

我希望在单词 SUMA 之后得到第一个十进制数字(用逗号)(SUMA和数字之间可能会有更多单词)

  

12,36

实现这一目标的最简单方法是什么?

7 个答案:

答案 0 :(得分:1)

您不需要正则表达式*。简单的子串和删除可以做得很好 这是我快速掀起的事情。

string test = "Ł9CZIA KUOTA PIV 1,21 SUMA 12,36 otóuka 2 | 0350 |tKasa 1";
test = test.Substring(test.IndexOf("SUMA ") + 5);
test = test.Remove(test.IndexOf(' '));  

可能会以某种方式简化,但它可以解决问题。如果您需要的结果实际属于decimal类型,那么您当然需要进行转换。

*请注意,这并不能保证您有一个号码(例如,如果输入错误),那么您需要验证它。

由于您编辑了帖子以添加这样一个事实,即在我发布答案后,SUMA和号码之间可能有多个单词,我不会在此明确处理。在这种情况下,我认为正则表达式更有意义。

答案 1 :(得分:1)

如果SUMA和数字之间可以有单词,您可以匹配任何字符零次或多次非贪婪.*?,然后在组(\d+,\d+)中捕获

SUMA.*? (\d+,\d+)

string pattern = @"SUMA.*? (\d+,\d+)";
string input = @"Ł9CZIA KUOTA PIV 1,21 SUMA test 12,36 otóuka 1,1 2 | 0350 |tKasa 1";
Regex r = new Regex(pattern);
Match match = r.Match(input);                
Console.WriteLine(match.Groups[1]); // 12,36

Demo

答案 2 :(得分:0)

将正则表达式 6 # 'pages' is the number of pages in the pdf 7 filepath = pdfPath.rsplit('/', 1)[0] ----> 8 filename = pdfPath.rsplit('/', 1)[1] 9 10 #print pdf to jpg using jpg printer Regexr link)与捕获组(SUMA (\d+,\d+))一起使用。类似的东西:

?<capture>

答案 3 :(得分:0)

我可以看到你想要找到 SUMA 这个词,然后跳过空格,然后得到一个带有可能小数部分的数字。

/SUMA\s+(\d+(?:,\d+)?)/

答案 4 :(得分:0)

使用代码:

string str = "Ł9CZIA KUOTA PIV 1,21 SUMA 12,36 otóuka 2 | 0350 |tKasa 1";
int index = str.IndexOf("SUMA");
if (index > -1)
{
      str = str.Substring(index + 5);// SUMA + SPACE char == 4+1 = 5
      int inx = str.IndexOf(" ");
      if (index > -1)
      {
           str = str.Substring(0, inx);
           Console.WriteLine(str.Trim());
      }
}

答案 5 :(得分:0)

如果你需要一个逗号,你应该使用类似的东西:

SUMA\s(\d+,\d+[^\s])

答案 6 :(得分:0)

使用以下代码:

        string str ="Ł9CZIA KUOTA PIV 1,21 SUMA 12,36 otóuka 2 | 0350 |tKasa 1";
        var sentences = new List<String>();

        int position = 0, start = 0;

        do{
            position = str.IndexOf("SUMA", start);
            if (position >= 0){
                str = str.Substring(position).Trim();
                start += 5;

                position = str.IndexOf("SUMA", start);
                if (position >= 0){
                    string _str = str.Substring(0,position).Trim();
                    sentences.Add(_str);
                    str = str.Substring(position).Trim();
                    start = 0;
                }
                else
                    sentences.Add(str);


            }
        } while (position > 0);


        // Extract decimal 
        string pattern = @"(\d+,\d+)";
        Regex r = new Regex(pattern);

        foreach (var sentence in sentences){
                Match match = r.Match(sentence);
                Console.WriteLine(match.Groups[1]); 
        }