RegEx - совпадение чисел переменной длины

131

Я пытаюсь разобрать документ, в котором разбросаны номера ссылок.

Текстовый текст текст {4: 2} еще невероятный текст {4: 3} намного позже {222: 115} и еще немного текста.

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

{[0-9]:[0-9]}

Однако это явно не работает, как только вы сталкиваетесь с двух- или трехзначным числом, и мне трудно понять, что это должно быть. Никогда не может быть больше трех цифр {999: 999} - это максимальный размер, с которым можно работать.

У кого-нибудь есть идея правильного выражения для обработки этого?

Джаррод Крапива
источник
8
Даже если OP все равно, мне любопытно: почему голосование против этого вопроса? Я не вижу в этом ничего плохого.
Джон
3
@John: Почему-то людям нравится отрицать вопросы, на которые есть простые ответы, особенно в regexтегах.
CanSpice
1
В конце концов, этот вопрос получил более высокий рейтинг в Google, и в этом я нашел свой ответ.
Jasonfish

Ответы:

134
{[0-9]+:[0-9]+}

попробуйте добавить плюс (а)

генезис
источник
Это заняло у меня слишком много времени, чтобы найти ... спасибо за эту информацию!
level42
76

Какой движок регулярных выражений вы используете? Большинство из них поддерживают следующее выражение:

\{\d+:\d+\}

На \dсамом деле это сокращение для [0-9], но важная часть - это добавление, +которое означает «один или несколько».

Лили Баллард
источник
31

Попробуй это:

{[0-9]{1,3}:[0-9]{1,3}}

Это {1,3}означает «соответствие от 1 до 3 предшествующих символов».

CanSpice
источник
8

Вы можете указать, сколько раз вы хотите, чтобы предыдущий элемент совпадал, используя {min,max}.

{[0-9]{1,3}:[0-9]{1,3}}

Кроме того, вы можете использовать \dдля цифр вместо [0-9]большинства разновидностей регулярных выражений:

{\d{1,3}:\d{1,3}}

Вы также можете рассмотреть возможность экранирования внешнего {и }, просто чтобы прояснить, что они не являются частью определения повторения.

Эндрю Кларк
источник
2
Нет, пожалуйста, не делайте этого с большинством разновидностей регулярных выражений, если только вы не любите неевропейские цифры: fileformat.info/info/unicode/category/Nd/list.htm
xanatos
1

{\ d *: \ d *} должен работать.

* означает соответствие 0 или более предшествующих вхождений, то есть цифру.

Райан И
источник