2015-11-29 4 views
0

Я следующий регулярного выражениемRegex Захвата между разделителем

^.*(?<width>\d*)x(?<height>\d*).*$ 

и хочу, чтобы разобрать эту строку, чтобы я мог получить ширину и высоту в пределах в но могу захватывать только высоту. Что я делаю неправильно с моим захватом?

iPhone (320x50 pt) 

ответ

2

Первый .* слишком жадным и соответствует слишком много (все до x - потому что \d* позволяет пустую строку, будет соответствовать). Вы можете использовать не жадный .*?:

^.*?(?<width>\d*)x(?<height>\d*).*$ 

В качестве альтернативы, матч не-цифр в первой части:

^[^\d]*(?<width>\d*)x(?<height>\d*).*$ 

Если ширина всегда предшествует (, вы можете просто указать его:

^.*\((?<width>\d*)x(?<height>\d*).*$ 

Здесь есть несколько возможностей, и все зависит от строк, которые вы пытаетесь сопоставить. Трудно сказать только из одного примера, какой подход лучше всего подходит для вас.

1

Thats потому что ваш первый. * Жадный и захватывает все до x, так как вы разрешаете 0-n цифр.

Так я вижу два быстрых замены:

^\D*(?<width>\d*)x(?<height>\d*)\D*$ 

будет искать нецифровые до ширины

вы также можете сделать

^.*?(?<width>\d*)x(?<height>\d*).*?$ 

, который бы не жадный поиск ,

Проверьте эту попытку на https://regex101.com/r/lD7aA0/1

Смежные вопросы