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

Тема в разделе "Регулярные выражения", создана пользователем jon4god, 28 июн 2019.

  1. jon4god

    jon4god

    Регистр.:
    13 авг 2009
    Сообщения:
    221
    Симпатии:
    51
    Регулярка используется в Гугл таблице
    Вот так работает текущая:
    https://regex101.com/r/Bn2UhP/1
    Проблема в том, что иногда слово перед цифрами может также оканчиваться на цифру и происходит лишний перенос строки.
    Как этого избежать? В регулярках не силен. :(
     
  2. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    269
    Симпатии:
    339
    Последнее редактирование: 28 июн 2019
    jon4god нравится это.
  3. jon4god

    jon4god

    Регистр.:
    13 авг 2009
    Сообщения:
    221
    Симпатии:
    51
  4. gothmog

    gothmog Постоялец

    Регистр.:
    18 июн 2011
    Сообщения:
    68
    Симпатии:
    27
    А какие там цифры? В плане, если слово оканчивается на 1-2 цифры максимум, а номера 4х значные, то можно поставить ограничение по длине ([0-9]{4,}). Хотя это костыль.
     
  5. y371

    y371 Писатель

    Регистр.:
    21 сен 2017
    Сообщения:
    4
    Симпатии:
    1
    с предложенной тебе регуляркой "(\s\d+\s)" ничего не сбоит. нормально переносится
     
  6. jon4god

    jon4god

    Регистр.:
    13 авг 2009
    Сообщения:
    221
    Симпатии:
    51
    Сбоит. Если ник у человека заканчивается на цифры, то значение переносится. А вообще ник может быть таким по умолчанию "Driver 4446" Может уже и пятизначные есть, но пока не видел.
    Номера не более 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)&""))
    Делается запрос. Берутся данные в виде матрицы, матрица переводится в одну строку разделяемая пробелами, потом это строка разбивается регуляркой.
    Хм... Может сработал метод резинового утенка. Может надо пробел на что-то другое и переносить по этому символу? Или хрен редьки не слаще?
     
  7. y371

    y371 Писатель

    Регистр.:
    21 сен 2017
    Сообщения:
    4
    Симпатии:
    1
    вместо
    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
     
  8. jon4god

    jon4god

    Регистр.:
    13 авг 2009
    Сообщения:
    221
    Симпатии:
    51
    Мне не нужна запись вида
    "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 |

    Надеюсь это поможет понять, что происходит.
     
  9. y371

    y371 Писатель

    Регистр.:
    21 сен 2017
    Сообщения:
    4
    Симпатии:
    1
    Код:
    =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"))
    так должно работать, но думается мне, что можно как-то проще и без регулярок
     
    jon4god нравится это.
  10. jon4god

    jon4god

    Регистр.:
    13 авг 2009
    Сообщения:
    221
    Симпатии:
    51
    Тоже чую, что наверно можно, но нужен эксперт по таблицам, а то срам какой-то вообще получается. Это еще не самая страшная формула. Вот страшнее:

    Вроде по тестовой таблице прогнал и все сработало. Спасибо!
     
    cheapsms нравится это.