Как найти все ячейки во всей книге Excel, содержащие регулярное выражение?

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

import openpyxl
import re

date = re.compile(r'\d{1,2}[/-]\d{1,2}[/-]18-\d{1,2}[/-]\d{1,2}[/-](18|19)')
   for sheet in wb:
      for row in sheet.iter_rows():
         for cell in row:
           if cell.value == date:
             print (cell.value)

Примеры:

          IN: mo = date.search('Support Term 3/7/18-3/6/18')
          IN: mo.group()
          OUT: '3/7/18-3/6/18'

(я проверил свое регулярное выражение, и оно работает так, как я хочу, но мой цикл for явно нуждается в некоторой доработке)

Можете ли вы привести несколько примеров того, что вы пытаетесь сопоставить? Кажется, вы хотите сопоставить некоторые значения даты, но если ваш шаблон регулярного выражения не работает, то его чтение, вероятно, не даст нам точной демонстрации того, чего вы пытаетесь достичь.

41686d6564 07.04.2019 06:26

да, извините, я отредактировал свой пост, надеюсь, это поможет

jwrig 07.04.2019 06:38

Да, ваше регулярное выражение кажется мне подходящим (хотя оно также будет соответствовать недопустимым датам, но это в стороне...) Я действительно не очень хорошо знаю Python, но не следует ли if cell.value == date заменить чем-то вроде if date.match(cell.value) или if date.search(cell.value)?

41686d6564 07.04.2019 06:46

да, это данные, которые мне нужны, независимо от того, плохи они или нет, и я попробовал метод date.search(), но он возвращает ошибку, потому что ему нужна строка или байты, подобные объекту

jwrig 07.04.2019 06:54

Смотрите мой комментарий к ответу ниже.

41686d6564 07.04.2019 06:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
189
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что вы хотите использовать метод search скомпилированного объекта:

import openpyxl
import re

date = re.compile(r'\d{1,2}[/-]\d{1,2}[/-]18-\d{1,2}[/-]\d{1,2}[/-](18|19)')
for sheet in wb:
    for row in sheet.iter_rows():
       for cell in row:
         if date.search(str(cell.value)):
           print(cell.value)

TypeError Traceback (последний последний вызов) <ipython-input-10-7329745cced7> в <module> 2 для строки в sheet.iter_rows(): 3 для ячейки в строке: ----> 4, если date.search(cell. значение): 5 print (cell.value) TypeError: ожидаемая строка или байтовый объект

jwrig 07.04.2019 06:51

да, я тоже это пробовал, но, похоже, в методе date.search() нужна строка или «байтовый объект»

jwrig 07.04.2019 06:52

Опять же, я не знаю python, но похоже, что cell.value не является строкой (что на самом деле имеет смысл, потому что Cell.Value является вариантом в Excel VBA и обычно является объектом при чтении другими языками программирования), поэтому его, вероятно, необходимо преобразовать . См. это.

41686d6564 07.04.2019 06:53

Да! это сработало спасибо. Я не понимал, что это не строковый тип с самого начала. Спасибо вам обоим за помощь. Я думал, что это что-то простое, но не думал, что это будет так просто.

jwrig 07.04.2019 07:08

Другие вопросы по теме