仅从文本中提取数字

时间:2016-06-24 16:23:39

标签: c# regex parsing pattern-matching match

我试图仅从字符串/文本中提取数字。以下是我正在使用的正则表达式模式。

Regex regex = new Regex(@"[\d+]\S+");
string extract_from = " 12 abcd 1-2-3a a123z 1.2.3.4 xyz";

来自字符串" extract_from"上面,正则表达式正在提取数字

12
1-2-3a
123z
1.2.3.4

正则表达式正确地提取它除了第二个和第三个" 1-2-3a"," 123z",它们不应该被提取,因为它包含一个字母表。我可以在正则表达式中添加什么模式来不提取数字之间还有字母表的位置?

破折号和点都可以,不是字母。

4 个答案:

答案 0 :(得分:0)

在这里,将正则表达式\ S更改为\ s,注意大写。

\ S匹配所有空格,\ s匹配空格。

//search bar hander hesham

$(function(){
    var searchField = $('#query');
    var icon = $('#search-btn');

    //focus handler

    $(searchField).on('focus',function(){
        $(this).animate({
            width:'100%'
        },400);

        $(icon).animate({right:'10px'},400)
    });

    //blur event 
    $(searchField).on('blur',function(){
        if(searchField.val()==''){
            $(searchField).animate({width:'45%'},400);
            $(icon).animate({right:'360px'},400);
        }
    });
$('#search-form').submit(function(e){
    e.preventDefault();
});
})

function search(){
    // clear results

    $('#results').html('');
    $('buttons').html('');

    //get form input
    q=$('#query').val();

    //run get reqeues on API

    showSpinner();
    $.get(
        "https://www.googleapis.com/youtube/v3/search",{
            part: 'snippet, id',
            q: q,
            type:'video',
            key:'AIzaSyC1CJHONRDvyfSS3xAOG9SfW_VCXMoLK5Y'},
            function(data){
                var nextPageToken = data.nextPageToken;
                var prevPageToken = data.prevPageToken;
                console.log(data);

                $.each(data.items, function(i, item){
                    var output = getOutput(item);

                    // display results 
                    $('#results').append(output);
                });

                var buttons = getButtons(prevPageToken,nextPageToken);

                //display buttons

                $('#buttons').append(buttons);
                hideSpinner();

            }
        );
}

//next page function

function nextPage(){

    var token = $('#next-button').data('token');
    var q = $('#next-button').data('query');
    $('#results').html('');
    $('buttons').html('');

    //get form input
    q=$('#query').val();

    //run get reqeues on API

    showSpinner();
    $.get(
        "https://www.googleapis.com/youtube/v3/search",{
            part: 'snippet, id',
            q: q,
            pageToken: token,
            type:'video',
            key:'AIzaSyC1CJHONRDvyfSS3xAOG9SfW_VCXMoLK5Y'},
            function(data){
                var nextPageToken = data.nextPageToken;
                var prevPageToken = data.prevPageToken;
                console.log(data);

                $.each(data.items, function(i, item){
                    var output = getOutput(item);

                    // display results 
                    $('#results').append(output);
                });

                var buttons = getButtons(prevPageToken,nextPageToken);

                //display buttons

                $('#buttons').append(buttons);
                hideSpinner();

            }
        );  

}

function prevPage(){

    var token = $('#prev-button').data('token');
    var q = $('#prev-button').data('query');
    $('#results').html('');
    $('buttons').html('');

    //get form input
    q=$('#query').val();

    //run get reqeues on API
showSpinner();
    $.get(
        "https://www.googleapis.com/youtube/v3/search",{
            part: 'snippet, id',
            q: q,
            pageToken: token,
            type:'video',
            key:'AIzaSyC1CJHONRDvyfSS3xAOG9SfW_VCXMoLK5Y'},
            function(data){
                var nextPageToken = data.nextPageToken;
                var prevPageToken = data.prevPageToken;
                console.log(data);

                $.each(data.items, function(i, item){
                    var output = getOutput(item);

                    // display results 
                    $('#results').append(output);
                });

                var buttons = getButtons(prevPageToken,nextPageToken);

                //display buttons

                $('#buttons').append(buttons);
                hideSpinner();

            }
        );  

}
/// build output

function getOutput(item){

    var videoId = item.id.videoId;
    var title = item.snippet.title;
    var description = item.snippet.description;
    var thumb = item.snippet.thumbnails.high.url;
    var channelTitle = item.snippet.channelTitle;
    var videoDate = item.snippet.publishedAt;

    //build output string

    var output = '<li>'+
    '<div class="list-left">'+
    '<img src="'+thumb+'">'+
    '</div>'+
    '<div class="list-right">'+
    '<h3>'+title+'</h3>'+
    '<small>By <span class="cTitle">'+channelTitle+'</span> On '+videoDate+'</small>'+
    '<p>'+description+'</p>'+
    '</div>'+
    '</li>'+
    '<div class="clearfix"></div>'+
    '';
return output;
}

//build the buttons

function getButtons(prevPageToken,nextPageToken){
    if(!prevPageToken){
        var btnoutput = '<div class="button-container">'+
                         '<button id="next-button" class="paging-button" data-token="'+nextPageToken+'" data-query="'+q+'"'+
                         'onclick="nextPage();">Next Page</button></div >';


    }else{
         var btnoutput = '<div class="button-container">'+
                         '<button id="prev-button" class="paging-button" data-token="'+prevPageToken+'" data-query="'+q+'"'+
                         'onclick="prevPage();">Previous Page</button>'+
                         '<button id="next-button" class="paging-button" data-token="'+nextPageToken+'" data-query="'+q+'"'+
                         'onclick="nextPage();">Next Page</button></div >';
    }   

    return btnoutput;
}

function showSpinner() {
  if($(".spinner").length == 0) {
    $("body").append("<div class=\"backdrop\"><div class=\"spinner\"><div class=\"dot1\"></div><div class=\"dot2\"></div></div></div>");
  }
  $(".backdrop").show();
}

function hideSpinner() {
  $(".backdrop").hide();
} 

答案 1 :(得分:0)

试试这个:

Resultant array
4 5 2 3 7 1

这将允许具有多个小数的表达式,并且在它们内部破折号,而不是在开头。

您可以使用regexhero.net或www.regexplanet.com来测试您的正则表达式,它们是非常强大的工具。

您给定输入的输出将是以下匹配:

[0-9\-.]+\s+

根据OP的评论进行修改 这个正则表达式不应该在开头需要一个空格。如果您需要在该行的末尾匹配一个数字,那么为它添加一个特殊情况可能是最简单的:

12
1.2.3.4

答案 2 :(得分:0)

此代码从文本中提取数字。

    using System;
    using System.Collections.Generic;

    // ...
    static void Main(string[] args)
    {
        Console.ForegroundColor = ConsoleColor.Cyan;
        int[] numbers = NumberExtractor("abcd1234");

        foreach (int number in numbers)
            Console.WriteLine(number);

        Console.ForegroundColor = ConsoleColor.Gray;
        Console.Write("Press any key to quit . . . ");
        Console.ReadKey(true);
    }

    static int[] NumberExtractor(string input)
    {
        List<int> numberslist = new List<int>();
        int currentnumber;

        foreach (char letter in input)
        {
            if (int.TryParse(letter.ToString(), out currentnumber))
                numberslist.Add(currentnumber);
        }

        int[] numbersarray = numberslist.ToArray();
        return numbersarray;
    }

答案 3 :(得分:0)

使用此模式捕捉除字母之外的任何内容

(?!\S*[a-zA-Z])\b([^a-zA-Z\s]+)\b

Demo