Regex для получения первого числа в строке с другими символами

Я новичок в регулярных выражениях, и мне было интересно, как я могу получить только первое число в строке, как 100 2011-10-20 14:28:55. В этом случае я бы хотел, чтобы он возвращал 100, но число также может быть короче или длиннее.

Я думал о чем-то вроде [0-9]+, но он принимает каждое число отдельно (100,2001,10,...)

Спасибо.

Ответ 1

Попробуйте это для первого номера в строке (который не может быть в начале строки):

    String s = "2011-10-20 525 14:28:55 10";
    Pattern p = Pattern.compile("(^|\\s)([0-9]+)($|\\s)");
    Matcher m = p.matcher(s);
    if (m.find()) {
        System.out.println(m.group(2));
    }

Ответ 2

/^[^\d]*(\d+)/

Это начнется с самого начала, пропустит любые цифры и сопоставит первую последовательность найденных цифр.

EDIT: это Regex будет соответствовать первой группе чисел, но, как указано в других ответах, parseInt является лучшим решением, если вы знаете, что число находится в начале строки

Ответ 3

Просто

([0-9]+) .* 

Если у вас всегда есть пробел после первого номера, это будет работать

Ответ 4

Предполагая, что между первыми двумя числами всегда есть пробел, то

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

Но для чего-то подобного вам лучше использовать простые строковые операции:

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

Regexs являются вычислительно дорогостоящими, и их следует избегать, если это возможно.

Ответ 5

приведенный ниже код выполнит трюк.

Integer num = Integer.parseInt("100 2011-10-20 14:28:55");

Ответ 6

Это расширение строки отлично работает, даже если строка не начинается с номера. return 1234 в каждом случае - "1234asdfwewf", "% sdfsr1234" "## # 1234"

    public static string GetFirstNumber(this string source)
    {
        if (string.IsNullOrEmpty(source) == false)
        {
            // take non digits from string start
            string notNumber = new string(source.TakeWhile(c => Char.IsDigit(c) == false).ToArray());

            if (string.IsNullOrEmpty(notNumber) == false)
            {
                //replace non digit chars from string start
                source = source.Replace(notNumber, string.Empty);
            }

            //take digits from string start
            source = new string(source.TakeWhile(char.IsDigit).ToArray());
        }
        return source;
    }

Ответ 7

[0-9] означает, что числа 0-9 можно использовать + означает 1 или более раз. если вы используете [0-9] {3}, вы получите 3 номера

Ответ 8

Попробуйте ^(?'num'[0-9]+).*$, который заставляет его начинать с самого начала, читать число, хранить его до "num" и потреблять остаток без привязки.

Ответ 9

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()+" ");

        }