Nano Hash - криптовалюты, майнинг, программирование

Извлечь все ссылки на ячейки в excel с помощью regex в java

иметь данные excel и формулы, такие как:

  • (S10+S14+S18+S22+S26+S30+S34)
  • E10+E11+СУММ(E10;E14:E17)*E18-ЕСЛИ(E19‹1,E20, E21)
  • СУММ(E14:E19)
  • S16*S15

и так далее.

Я хочу получить все ссылки на ячейки из строк. Как в этом примере: "E10+E11+СУММ(E10;E14:E17)*E18-IF(E19‹1,E20, E21)"

Мне нужна выходная подстрока типа "E10 E11 ... E21" или разделенная знаком ",".

Я много тестировал с регулярным выражением, но не могу получить правильный результат. Я использую этот код:

String formulaString = "E10+E11+SUM(E10;E14:E17)*E18-IF(E19<1,E20, E21)";
Pattern pattern = Pattern.compile("REGEX");
Matcher matcher = pattern.matcher(formulaString);

Я пробовал следующее регулярное выражение:

http://social.msdn.microsoft.com/Forums/en-US/815e819c-f0f2-4a53-8407-98b0f7f116e2/regex-to-extract-list-of-cell-references-from-excel-formula?forum=csharpgeneral

REGEX: (\w+|)?\$?(?:\bXF[AD]|X[A-E][AZ]|[A-W][AZ]{2}|[AZ]{2}|[AZ])\ $?(?:104857[0–6]|10485[0–6]\d|1048[0–4]\d{2}|104[0–7]\d{3}|10[0–3] ]\d{4}|[1-9]\d{1,5}|[1-9])d?\b(:\s?\$?(?:\bXF[A-D]|X[A-E ][A-Z]|[A-W][A-Z]{2}|[A-Z]{2}|[A-Z])\$?(?:104857[0-6]|10485[0-6]\d|1048[ 0-4]\d{2}|104[0-7]\d{3}|10[0-3]\d{4}|[1-9]\d{1,5}|[1- 9])г?\б)?

http://social.msdn.microsoft.com/Forums/en-US/dc179984-4fc8-4346-90e8-1649a23b6afe/regex-solution-to-id-excel-cell-references-in-an-excel-formula-string?forum=regexp

REGEX: \$?\b([A-Z]|[A-H][A-Z]|I[AV])\$?([1-9]\d{0,3}|[1-5]\d{4 }|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-6])\b([:\s] \$?\b([A-Z]|[A-H][A-Z]|I[A-V])\$?([1-9]\d{0,3}|[1-5]\d{4}| 6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-6])\b)?

Для некоторых формул они работают, но не для всех.

Я надеюсь, что кто-нибудь может мне помочь или дать мне совет :)


Ответы:


1

В первом потоке, на который вы ссылаетесь, регулярное выражение, которое вы разместили под ссылкой, нигде не может быть найдено на странице. Вы действительно использовали регулярное выражение с этой страницы? Было предложено регулярное выражение:

(\w+|)?\$?(?:\bXF[A-D]|X[A-E][A-Z]|[A-W][A-Z]{2}|[A-Z]{2}|[A-Z])\$?(?:104857[0-6]|10485[0-6]\d|1048[0-4]\d{2}|104[0-7]\d{3}|10[0-3]\d{4}|[1-9]\d{1,5}|[1-9])d?\b(:\s?\$?(?:\bXF[A-D]|X[A-E][A-Z]|[A-W][A-Z]{2}|[A-Z]{2}|[A-Z])\$?(?:104857[0-6]|10485[0-6]\d|1048[0-4]\d{2}|104[0-7]\d{3}|10[0-3]\d{4}|[1-9]\d{1,5}|[1-9])d?\b)?

Попробуй это.

Кроме того, было бы полезно узнать, какие строки специфические не сопоставляются правильно, поскольку вы упомянули, что некоторые из них работают.

03.03.2014
  • Спасибо за Ваш ответ. Может быть, я что-то пропустил с копированием и вставкой... Но я попробовал предоставленную вами строку. С этой строкой работают следующие тестовые данные: S16*S15 и E10+E11+SUM(E10;E14:E17)*E18-IF(E19‹1,E20, E21) 03.03.2014
  • @user3373589 user3373589 Но какие строки не работают? 03.03.2014
  • например (S10+S14+S18+S22+S26+S30+S34) и СУММ(E14:E19) 03.03.2014

  • 2
  • Не хороший ответ. Есть имена функций, которые можно спутать с буквами ячеек (например, SUM), и ваш код также не учитывает номера ячеек (например, он должен возвращать E10, а не только E). 03.03.2014
  • Ответ не соответствует задаче. Но все равно спасибо .. Может быть, мне будет легче получить ответ, разделив его регулярным выражением ... Я попробую что-нибудь. 03.03.2014
  • Мои извинения. Я забыл про цифры. Я отредактировал ответ, включив в него числа. 03.03.2014
  • @Solace Это лучше, но по-прежнему не решает другую проблему, о которой я упоминал, - вам нужно учитывать встроенные функции, такие как Yr1990() 03.03.2014
  • Возможно, OP может написать функцию, которая проверяет, является ли текущая строка ячейкой. 03.03.2014
  • 1 символ и числа 1-7, 2 символа и числа 1-7, 3 символа и числа 1-7. Это должна быть правильная классификация для ячеек - единственная проблема в том, что я не могу заставить его работать с регулярным выражением. 03.03.2014
  • Глядя на образцы ... кажется, что каждая ячейка представляет собой заглавную букву, за которой следуют две цифры. Вы можете отфильтровать их в цикле for. 03.03.2014
  • Спасибо. Пример кажется рабочим, но ячейка также может выглядеть как ee1111 или XFD1048576. Я предоставил классификацию в своем последнем комментарии. Я постараюсь улучшить. Может поможет :) 03.03.2014
  • Может ли имя функции состоять из букв и цифр? Или функции строго буквенные? 03.03.2014
  • Есть некоторые. Как и DEC2BIN, но для моего требования не важно учитывать эти несколько исключений. 03.03.2014
  • Если это так, то вы можете определить ячейку как нечто, имеющее как число, так и букву. Я обновил функцию. 03.03.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..