Найдите первый экземпляр персонажа, затем работайте задом наперед - PullRequest
0 голосов
/ 16 октября 2019

У меня возникают проблемы, когда я не могу понять, как найти 1-й экземпляр чего-либо, а затем работать в обратном направлении, используя Regex ...

У меня есть несколько строк, в которых код продукта объединяется с продуктом. имя. К сожалению, разделитель (тире), отделяющий код продукта от кода продукта, одинаков.

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

Но я знаю, что все названия продуктов имеют пробел.

Итак, взяв эти две строки,например:

  • "ABC-ER-015-30-NEW YORK ДВУХТОНАЛЬНЫЕ СЕРЬГИ"
  • "ABC-1234-CALIFORNIA CUSTOM PRODUCT"

Я хотел бы сделать эквивалент:

  • Найдите первый пробел ...
  • Затем вернитесь назад, чтобы найти последний тире ...
  • Затем извлеките все до этой черты ...

Итак, что я хочу извлечь из приведенных выше 2 примеров: - "ABC-ER-015-30" - "ABC-1234 "

Это работает, если в имени элемента нет тире:

(.*)-

Но если в имени элемента есть тире, он захватывает часть имени элемента.

Я чувствую, что что-то очень простое, что мне не хватает.

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Вы можете использовать символы 1+ в верхнем регистре и повторить совпадение символов в тире и 1+ в верхнем регистре.

Как и вы know that all product names have a space, вы можете добавить положительный прогноз, подтверждающий тире, 1+ непробельных символов с пробелом.

^[A-Z0-9]+(?:-[A-Z0-9]+)+(?=-\S+ )
  • ^ Начало строки
  • [A-Z0-9]+ Совпадение 1+ раз A-Z0-9
  • (?:-[A-Z0-9]+)+ Повторение 1+ раз сопоставления - и A-Z0-9
  • (?=-\S+ )Позитивный взгляд, утверждение -, 1+ непробельных символов и пробела

Regex demo

Другой вариант - использовать вместо этого группу захватаположительного взгляда

^([A-Z0-9]+(?:-[A-Z0-9]+)+)-\S+ 

Regex demo

1 голос
/ 16 октября 2019

Вы можете использовать следующий шаблон:

^(?:[A-Z0-9]+-?)+?(?=-\S+[ ])

Демо .

Разбивка:

^               # Beginning of the string.
(?:             # Start of a non-capturing group.
    [A-Z0-9]+   # Any uppercase letter or a digit repeated one or more times.
    -?          # An optional hyphen characters.
)               # End of the non-capturing group.
(?=             # Start of a positive Lookahead.
    -           # Matches a hyphen character literally.
    \S+         # Any non-whitespace character repeated one or more times.
    [ ]         # Matches a space character.
)               # End of the lookahead.

Список литературы:

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