Используя Regex, я пытаюсь вернуть следующее (звездочки обозначают то, что я хотел бы извлечь) из каждой строки с помощью одной команды Regex:

FO4H56FD-BTU (Follow Home 56): PLTD8

\***********

FO4H56FD-SYH-BI (Follow Home 56 SYH): PLTD8

\***********

FO4H52FD-SZH-AG4R-BI (Follow Home 52 SAH): QQTD8

\****************

FO4H58FD-SGH: (Follow Home 58 TGT): PLTS8

\***********

Почему-то у меня много сложностей. Я использовал различные методы, и в настоящее время у меня есть =REGEXEXTRACT(A43,"(FO.+)\-BI"), который не работает. Моя тоже сейчас не ищет :. Я использовал | для нескольких правил, которые, похоже, не работали.

1
Mint_Sauce 4 Авг 2017 в 22:54
Не могли бы вы проверить и подтвердить, может ли последний разделитель совпадения быть : или пробелом?
 – 
Wiktor Stribiżew
4 Авг 2017 в 22:58
Попробуйте "^(.*?)(?:-BI)?(?:[ :]|$)"
 – 
Wiktor Stribiżew
4 Авг 2017 в 23:05
Попробуйте FO[A-Z0-9-]+(-BI)?
 – 
TallChuck
4 Авг 2017 в 23:06
Да, последним разделителем будет либо пробел, либо:
 – 
Mint_Sauce
4 Авг 2017 в 23:22

1 ответ

Лучший ответ

Вы можете использовать

=REGEXEXTRACT(A43,"^(.*?)(?:-BI)?(?:[ :]|$)")

enter image description here

Подробности :

  • ^ - начало строки
  • (.*?) - захват группы №1, совпадающей с любыми символами 0+, как можно меньше
  • (?:-BI)? - необязательная группа без захвата, соответствующая 1 или 0 вхождению подстроки -BI
  • (?:[ :]|$) - либо пробел, :, либо конец строки
2
Wiktor Stribiżew 4 Авг 2017 в 23:08
2
Потрясающе, спасибо вам большое. Часы разочарования решаются за секунды!
 – 
Mint_Sauce
4 Авг 2017 в 23:21