Регулярное выражение - исключить средний шаблон - PullRequest
1 голос
/ 04 мая 2020

Я борюсь за исключение или игнорирование определенного шаблона.

В Excel есть много временных меток, за которыми следует идентификатор

т.е.

[0:02:25] 10652A

иногда возникает ошибка, когда она так путается

1 [0:03:23] 0652A

Здесь 1 принадлежит 0652A, поэтому должно быть 10652A.....

Как я могу завершить мой код, чтобы эти ошибки (часть средней временной метки) можно было игнорировать для правильного соответствия идентификатору?

Это то, что я до сих пор получил:

starting_digits = re.search(r"^(\d+)", prefix)
id_code = re.search(r"(\d{2,4}.{1,3}):", prefix).group(1)

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 04 мая 2020

Использование:

# prefix = "1 [0:03:23] 0652A"
mobj = re.search(r"(\w+)?\s*\[(.*)\]\s*(\w+)", prefix)

id_code = mobj.group(1) + mobj.group(3) if mobj.group(1) else mobj.group(3)
timestamp = mobj.group(2)

print(id_code, timestamp)

Это печатает:

10652A 0:02:25

Вы можете проверить регулярное выражение здесь .

0 голосов
/ 04 мая 2020

Вместо того, чтобы находить содержимое идентификатора, вы можете просто стереть часть метки времени, которая соответствует \s*\[[\d:]+\]\s*

  • любому количеству места
  • левая квадратная скобка
  • более одного digits/:
  • правая квадратная скобка
  • любое количество места
reg = r"\s*\[.*\]\s*"

prefix = "[0:03:23] 0652A"
print(re.sub(reg, "", prefix))  # 0652A

prefix = "1 [0:03:23] 0652A"
print(re.sub(reg, "", prefix))  # 10652A
0 голосов
/ 04 мая 2020

Вот решение для удаления всего текста в квадратных скобках.

\ [. * \]

...