Как извлечь дату в формате гггггггг, используя регулярное выражение python - PullRequest
0 голосов
/ 04 мая 2020

Я знаю, что это основа c, но кто-то может предложить решение для регулярного выражения, чтобы извлечь "1234-5678" из "abcfd1234-5678gfvjh". Здесь начальная и конечная строки могут быть чем угодно, и они могут быть не всегда, то есть строка может быть просто "1234-5678". Гарантируется, что между цифрами не должно быть алфавита, только "-". Существует еще один формат строки "1234-56". то есть второе число может иметь длину 2 или 4. Пожалуйста, см. объяснение ниже:

input  :a = "abcfd1234-5678gfvjh"

output :"1234-5678"

input  :a = "abcfd1234-56gfvjh"

output :"1234-56"

input  :a = "1234-5678hgjg"

output :"1234-5678"

input  :a = "abcfd1234-5678"

output :"1234-5678"

input  :a = "1234-56"

output :"1234-56"

Ответы [ 3 ]

1 голос
/ 04 мая 2020
\d{4}[-–](?:\d{4}|\d{2})

См. Объяснение здесь: https://regex101.com/r/kocRuY/2

В основном мы говорим, что нужно искать четыре цифры, затем дефис, затем либо (используя не захватывает группу в скобки) четыре цифры или , в противном случае две цифры.

Вы должны использовать метод поиска "regex", а не метод "match", так как процессор должен будет найти где последовательность начинается в строке. Если вы ограничены совпадением с самого начала с помощью «match», то вы можете добавить какой-то квантификатор в начале, чтобы сожрать начальные символы.

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

Конечно, дюжина дубликатов на StackOverflow.
Поскольку запрос происходит очень часто, есть модуль с именем datefinder (pip install datefinder). Затем вы бы назвали это так:

import datefinder
matches = datefinder.find_dates(your_string_here)
for match in matches:
    print (match)
0 голосов
/ 04 мая 2020
>>> import re
>>> re.findall('\d+-\d+', "abcfd1234-5678gfvjh")
['1234-5678']

Вы можете попробовать различные регулярные выражения в https://regex101.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...