РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ РАЗМЕЩАЕТ все символы по крайней мере до 4 последовательных заглавных букв

#google-sheets #google-sheets-formula

Вопрос:

В очень длинной строке я хотел бы удалить все, что начинается с SPAIN: , пока мы не получим по крайней мере 4 заглавные буквы подряд, заканчивающиеся на : (т. Е. INDIA: или SOUTH AFRICA: или NORTHERN-IRELAND: ).

Моя попытка, где A2 — очень длинная строка:

 =REGEXREPLACE(A2,"SPAIN: .*([A-ZÀ-ÿ-' ]{4,}): ","$1: ")
 

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

Есть какие-нибудь идеи?

Пример листа, с которым можно поиграть здесь: https://docs.google.com/spreadsheets/d/1_DbCmGhqaDvFtdi20PnuA35i-Sv_3nMS9Kl_e7CVu3k/edit?usp=sharing

Ответ №1:

Попробуй:

 =REGEXREPLACE(A1,"SPAIN:([^:] )([^A-Z:])","$2: ")
 

введите описание изображения здесь

Для образца листа будет работать следующая формула:

 =ArrayFormula(REGEXREPLACE(A2:A,"ESPAGNE:(.*?)-:-([A-Z]|$)","$2"))
 

введите описание изображения здесь

Комментарии:

1. Привет, Basic, спасибо за ваш ответ. У меня также есть специальные символы между странами (такие как : - ' / . ( ) ). Есть какие-нибудь идеи?

2. @Exdefoot добавлена формула для образца листа,

3. вторая формула-это в значительной степени то, что я искал, спасибо. Только одна последняя проблема заключается в том, что если в моей строке есть два (или более) ESPAGNE: , она удаляет только первый. Есть ли способ за один REGEXREPLACE раз удалить их все?

4. @Exdefoot это странно. Как я тестирую, формула удаляет все вхождения найденных строк. У вас есть тестовый случай?

5. @Exdefoot есть два последовательных ESPAGNE — для этого используйте =ArrayFormula(REGEXREPLACE(A2:A,"(ESPAGNE:(.*?)-:-) ([A-Z]|$)","$3"))

Ответ №2:

Я добавил новый лист («Справка Эрика») в вашу электронную таблицу с образцом. Следующая формула приведена в B2 этого листа:

=ArrayFormula(IF(A2:A="",,REGEXREPLACE(REGEXREPLACE(A2:A,IF(LEFT(A2:A,4)="ESPA","^. ("amp;REGEXEXTRACT(A2:A,"-:-([A-ZÀ-Ý]{4}[^:] )")amp;")","ESPAGNE[^~] -:-([A-ZÀ-Ý]{4}[^:] )"),"$1"),"ESPA. $","")))

Это приведет к получению правильного результата для всех случаев в вашем образце.

Комментарии:

1. Спасибо за ваше предложение, но я ищу что-то, что можно сделать только в одном месте РЕГУЛЯРНОГО выражения, очень похожее на решение @basic