Regex для получения первого числа в строке с другими символами - PullRequest
15 голосов
/ 21 октября 2011

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

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

Спасибо.

Ответы [ 9 ]

19 голосов
/ 21 октября 2011
/^[^\d]*(\d+)/

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

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

6 голосов
/ 21 октября 2011

Просто

([0-9]+) .* 

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

4 голосов
/ 21 октября 2011

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

    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));
    }
4 голосов
/ 21 октября 2011

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

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

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

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

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

3 голосов
/ 21 октября 2011

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

Integer num = Integer.parseInt("100 2011-10-20 14:28:55");
2 голосов
/ 22 марта 2013

Это расширение строки работает отлично, даже если строка не начинается с числа. возвращает 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;
    }
1 голос
/ 21 октября 2011

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

1 голос
/ 21 октября 2011

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

0 голосов
/ 13 августа 2017
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()+" ");

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...