Помогите поправить регулярку

jon4god

Гуру форума
Регистрация
13 Авг 2009
Сообщения
224
Реакции
51
Регулярка используется в Гугл таблице
Вот так работает текущая:
Для просмотра ссылки Войди или Зарегистрируйся
Проблема в том, что иногда слово перед цифрами может также оканчиваться на цифру и происходит лишний перенос строки.
Как этого избежать? В регулярках не силен. :(
 
слово перед цифрами может также оканчиваться на цифру
А какие там цифры? В плане, если слово оканчивается на 1-2 цифры максимум, а номера 4х значные, то можно поставить ограничение по длине ([0-9]{4,}). Хотя это костыль.
 
с предложенной тебе регуляркой "(\s\d+\s)" ничего не сбоит. нормально переносится
Сбоит. Если ник у человека заканчивается на цифры, то значение переносится. А вообще ник может быть таким по умолчанию "Driver 4446" Может уже и пятизначные есть, но пока не видел.
А какие там цифры? В плане, если слово оканчивается на 1-2 цифры максимум, а номера 4х значные, то можно поставить ограничение по длине ([0-9]{4,}). Хотя это костыль.
Номера не более 99999. И как видишь выше, то может ник по умолчанию попасть в условие. Вот наверно самые плохие ситуации.
"Driver 1234 23435 aaa3 4355 bbbb45 45433" и надо чтобы регулярка поняла это и сделала:
Driver 1234 23435
aaa3 4355
bbbb45 45433
Но не уверен, что такая регулярка вообще существует. Еще и спецсимволы некоторые в ники вставляют. Может я неправильно вообще к задаче подхожу, но тогда мне нужен эксперт по Гугл таблицам.
вот формула
=If(COUNTA(Results!F2:F50)=0; ; REGEXREPLACE(TEXTJOIN(" "; true; QUERY(Results!A:F;"select A,F order by F desc limit 5")); "\b(\d\d+\s)"; "$1"&char(10)&""))
Делается запрос. Берутся данные в виде матрицы, матрица переводится в одну строку разделяемая пробелами, потом это строка разбивается регуляркой.
Хм... Может сработал метод резинового утенка. Может надо пробел на что-то другое и переносить по этому символу? Или хрен редьки не слаще?
 
вместо
REGEXREPLACE(TEXTJOIN(" "; true; QUERY(Results!A:F;"select A,F order by F desc limit 5")); "\b(\d\d+\s)"; "$1"&char(10)&"")
возможно просто написать
TEXTJOIN(" "; true; QUERY(Results!A:F;"select A,F,'
' order by F desc limit 5"))

в одинарных кавычках просто перевод строки через alt+enter
 
вместо
REGEXREPLACE(TEXTJOIN(" "; true; QUERY(Results!A:F;"select A,F order by F desc limit 5")); "\b(\d\d+\s)"; "$1"&char(10)&"")
возможно просто написать
TEXTJOIN(" "; true; QUERY(Results!A:F;"select A,F,'
' order by F desc limit 5"))
в одинарных кавычках просто перевод строки через alt+enter
Мне не нужна запись вида
"Driver 1234
23435
aaa3
4355
bbbb45
45433"
Что нужно я написал выше. Результат выдается в виде ячеек с данными (A,F) это мини-таблица. Чтобы поместить эти данные в одну ячейку я собираю их в строку через TEXTJOIN через указанный символ. Затем мне нужно разбить эту строку на более читаемый вариант, которым является последовательность двух ячеек. Для наглядности.

| Nick1 | 1234 |
| Nick2 | 2345 |
| Nick3 | 3456 |

Преобразуется в

| Nick1 1234 Nick2 2345 Nick3 3456 |

И нужно эту строку переделать в

| Nick1 1234
Nick2 2345
Nick3 3456 |

Надеюсь это поможет понять, что происходит.
 
Код:
=If(COUNTA(Results!F2:F50)=0; ; REGEXREPLACE(TEXTJOIN(char(10), true, QUERY(Results!A:F,"select A,F order by F desc limit 5")), "(.*?)\n(.*?(?:\n|$))", "$1 $2"))
так должно работать, но думается мне, что можно как-то проще и без регулярок
 
Код:
=If(COUNTA(Results!F2:F50)=0; ; REGEXREPLACE(TEXTJOIN(char(10), true, QUERY(Results!A:F,"select A,F order by F desc limit 5")), "(.*?)\n(.*?(?:\n|$))", "$1 $2"))
так должно работать, но думается мне, что можно как-то проще и без регулярок
Тоже чую, что наверно можно, но нужен эксперт по таблицам, а то срам какой-то вообще получается. Это еще не самая страшная формула. Вот страшнее:
Скрытое содержимое доступно для зарегистрированных пользователей!

Вроде по тестовой таблице прогнал и все сработало. Спасибо!
 
Назад
Сверху