Как мне написать регулярное выражение, которое соответствует началу строки, набору чисел, а затем хотя бы одному пробелу?

Я использую Rails 5. Я хочу удалить числа из начала моей строки, но только если за ними следует хотя бы один пробел. Я придумал регулярное выражение

/^\d+[:space:]/

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

2.4.0 :032 > line = "1sb    212"
 => "1sb    212"
2.4.0 :033 > line =~ /^\d+[:space:]/
 => 0

Оно не должно совпадать с выражением, потому что первое слово «1sb» имеет номер, но если за номером не следует пробел. Как я могу настроить свое выражение так, чтобы оно соответствовало только одному или нескольким числам, за которыми следует хотя бы один пробел?


person Dave    schedule 07.08.2017    source источник


Ответы (2)


Вам нужно поместить класс символов POSIX в выражение в квадратных скобках:

/^\d+[[:space:]]/
     ^         ^

См. демонстрацию Rubular.

В противном случае [:space:] рассматривается как обычный класс символов и соответствует одному символу: :, s (1sb имеет s после цифры), p, a, c или e.

person Wiktor Stribiżew    schedule 07.08.2017

Простым решением будет:

/^\d+\s+/

Обратите внимание, что \s+ захватывает не только пробелы, но также табуляцию и разрывы строк. Это может быть важно для вашего случая.

person zhulien    schedule 07.08.2017