Как оптимизировать эти регулярные выражения? - PullRequest
2 голосов
/ 10 июня 2019

У меня есть шаблон, который соответствует многим простым случаям.Я могу использовать регулярные выражения для каждого из них, но это стоит больших затрат производительности.Как я могу их оптимизировать?Шаблон в основном из значений ширины x высоты от 1 до 99 в 1 десятичной дроби с или без «m» (метр)

Шаблон (каждое значение может иметь «m» после или без)

23x10
23 x 10
23 x10
23x 10
2.3x10
2.3 x 10
2.3 x10
2.3x 10
2.3x5.1
2.3 x 5.1
2.3x 5.1
2.3 x5.1
1x5
2 x 5
3 x4
4x 5
...etc

Что я делал до сих пор:

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

static const QString c_Pattern_WidthHeight_1 = "\\dx\\d\\dm";                   //ex: 5x10m
static const QString c_Pattern_WidthHeight_2 = "\\d[,.]\\d x \\d\\dm";          //ex: 4.1 x 22m
static const QString c_Pattern_WidthHeight_3 = "\\d[,.]\\dx\\d\\dm";            //ex: 4.5x21m
static const QString c_Pattern_WidthHeight_4 = "\\dx \\d\\dm";                  //ex: 5x 14m
static const QString c_Pattern_WidthHeight_5 = "\\dx\\dm";                      //ex: 5x8m
static const QString c_Pattern_WidthHeight_6 = "\\d[,.]\\dm x \\d\\dm";         //ex: 3.8m x 10m
static const QString c_Pattern_WidthHeight_7 = "\\d[,.]\\d\\d x \\d";           //ex: 4.15 x 9
static const QString c_Pattern_WidthHeight_8 = "\\d x \\d\\dm";                 //ex: 3 x 10m
static const QString c_Pattern_WidthHeight_9 = "\\d\\dx\\d[,.]\\dm";            //ex: 10x4.5m

1 Ответ

0 голосов
/ 10 июня 2019

Попробуйте использовать это регулярное выражение:

^\d{1,2}(\.\d{1,2})? ?m? ?x ?\d{1,2}(\.\d{1,2})? ?m?$

Вот демоверсия

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