RegEx для совпадения прописных букв и тире с запятой - PullRequest
3 голосов
/ 21 мая 2019

Попытка удалить строки, которые следуют шаблону

тег начинается с

Size:  

и до следующей COMMA (,) включает символ -.

Пример:

Size: XS-S-M-L-XL-2XL,

или

Size: XS-S-M,

и т.д..

БУДЕТ выбран (включая ,)

но Size_S, будет проигнорировано, потому что нет -

Я близок с:

Size:(.*)-*(.?),

Но все еще не останавливается на ,

Вот 1 строка тегов:

Athletics, Fitted, Mesh, Feature_Moisture Wicking, Material_Polyester 100%, , Material_Polyester 100%, Material_Polyester Over 50%,  School, Style_Short Sleeves, Size_2XL, Size_L, Size_M, Size_S, Size_XL, Size_XS, Size: XS-S-M-L-XL-2XL, Uniforms, Unisex, V-Neck, VisibleLogos, Youth

Чтобы удалить все теги 'range' размера из моих ячеек и оставить только тег одного размера.

Решение можно найти здесь: regex101.com/r/VuTzba/1

Ответы [ 3 ]

2 голосов
/ 21 мая 2019

В вашем паттерне Size:(.*)-*(.?), вы сначала сопоставляете до конца строки, используя (.*).

После этого дефис -* и одиночный символ в группе (.?) являются необязательными, поэтому он будет возвращаться до последней запятой, поскольку это единственный символ, который должен быть сопоставлен.

Чтобы получить более точное соответствие, вы можете использовать повторяющийся шаблон для соответствия размерам:

Size: (?:\d*X[SL]|L|M|S)(?:-(?:\d*X[LS]|L|M|S))*,

Объяснение

  • Size: Размер совпадения с последующимпробел
  • (?: Группа без захвата
    • \d*X[SL]|L|M|S соответствует одному из перечисленных пунктов в чередовании
  • ) Закрыть группу
  • (?: Группа без захвата
    • -(?:\d*X[LS]|L|M|S) Сопоставить дефис с любым из перечисленных элементов
  • )*, Закрыть группу и повторить 0+ раз и сопоставить запятую

Regex demo

Поскольку более широкий шаблон может использовать класс символов и перечислять все разрешенные символы Size: [XSML\d]+(?:-[XSML\d]+)*, или совпадатьдо первой запятой Size:[^,]+,

Редактировать

Для совпадения Size: 28W-30W-32W-34W-36W-38W-40W, Size: 28W-30W-32W-34W или вы можете использоватьрасширить класс символов, добавив к нему |\d+W и завершить шаблон, соответствующий запятой, или указать конец строки $

Size: (?:\d*X[SL]|L|M|S|\d+W)(?:-(?:\d*X[LS]|L|M|S|\d+W))*(?:,|$)

Regex demo

0 голосов
/ 21 мая 2019

Size:\s*(.*?), будет захватывать все после двоеточия и до следующей запятой, пропуская первые пробелы.

0 голосов
/ 21 мая 2019

Мы можем захотеть добавить больше границ в нашем выражении здесь. Давайте начнем с чего-то похожего на:

Size:\s+([A-Z0-9-]+),

, где группа захвата () собирает нужные нам данные.

enter image description here

RegEx

Если это выражение нежелательно, его можно изменить или изменить в regex101.com .

RegEx Circuit

jex.im также помогает визуализировать выражения.

enter image description here

...