Regex to get first number in string with other characters

前端 未结 10 1481
萌比男神i
萌比男神i 2020-11-30 11:34

I\'m new to regular expressions, and was wondering how I could get only the first number in a string like 100 2011-10-20 14:28:55. In this case, I\'d want it to

相关标签:
10条回答
  • 2020-11-30 11:34

    Assuming there's always a space between the first two numbers, then

    preg_match('/^(\d+)/', $number_string, $matches);
    $number = $matches[1]; // 100
    

    But for something like this, you'd be better off using simple string operations:

    $space_pos = strpos($number_string, ' ');
    $number = substr($number_string, 0, $space_pos);
    

    Regexs are computationally expensive, and should be avoided if possible.

    0 讨论(0)
  • 2020-11-30 11:34

    [0-9] means the numbers 0-9 can be used the + means 1 or more times. if you use [0-9]{3} will get you 3 numbers

    0 讨论(0)
  • 2020-11-30 11:35
    /^[^\d]*(\d+)/
    

    This will start at the beginning, skip any non-digits, and match the first sequence of digits it finds

    EDIT: this Regex will match the first group of numbers, but, as pointed out in other answers, parseInt is a better solution if you know the number is at the beginning of the string

    0 讨论(0)
  • 2020-11-30 11:36

    NOTE: In Java, when you define the patterns as string literals, do not forget to use double backslashes to define a regex escaping backslash (\. = "\\.").

    To get the number that appears at the start or beginning of a string you may consider using

    ^[0-9]*\.?[0-9]+       # Float or integer, leading digit may be missing (e.g, .35)
    ^-?[0-9]*\.?[0-9]+     # Optional - before number (e.g. -.55, -100)
    ^[-+]?[0-9]*\.?[0-9]+  # Optional + or - before number (e.g. -3.5, +30)
    

    See this regex demo.

    If you want to also match numbers with scientific notation at the start of the string, use

    ^[0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?        # Just number
    ^-?[0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?      # Number with an optional -
    ^[-+]?[0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?   # Number with an optional - or  +
    

    See this regex demo.

    To make sure there is no other digit on the right, add a \b word boundary, or a (?!\d) or (?!\.?\d) negative lookahead that will fail the match if there is any digit (or . and a digit) on the right.

    0 讨论(0)
  • 2020-11-30 11:46

    the below code would do the trick.

    Integer num = Integer.parseInt("100 2011-10-20 14:28:55");
    
    0 讨论(0)
  • 2020-11-30 11:46
    public static void main(String []args){
            Scanner s=new Scanner(System.in);
            String str=s.nextLine();
            Pattern p=Pattern.compile("[0-9]+");
            Matcher m=p.matcher(str);
            while(m.find()){
                System.out.println(m.group()+" ");
    
            }
    
    0 讨论(0)
提交回复
热议问题