регулярное выражение получить первое слово - PullRequest
0 голосов
/ 06 декабря 2018

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

что у меня есть:

regexDate = r'.*(?=)[w]*\d{2}\/\d{2}\/\d{4}|.*(?=)[a-zA-Z]+\s[0-9][0-9],?\s[0-9][0-9][0-9][0-9]|.*(?=)\d{2}-\d{2}-\d{4}|\d{2}/\w*/\d{4}|.*(?=)\d{2}-\w*-\d{4}|.*(?=)\d{2}.\w*.\d{4}|.*(?=)\d{4}/\d{2}/\d{2}|.*(?=)\d{2}-\w*-\d{2}|.*(?=)\d{2}/\d{2}/\d{2}'

text = 'blah blah Start: 01-Oct-2018 blah blah End: 30-Sep-2019'

find =  re.findall(regexDate, text)

результат:

['blah blah Start: 01-Oct-2018 blah blah End: 30-Sep-2019']

В этом случае я просто хочу получить 'Начало: 01-окт-2018 и конец: 30 сентября 2019 года.

Примечание: Начало и конец могут быть разными наборами слов в других обстоятельствах.Форматы даты также отличаются.

Я попытался обернуть .*(?=) вокруг возможностей, но он просто вернется 30 сентября 2019 года.Может быть, кто-то может предложить более чистую версию?

Ответы [ 4 ]

0 голосов
/ 06 декабря 2018

Используйте это регулярное выражение для соответствия всем типам месяца (число или сокращение):

import re

regex = r"(\S+\s*\d{2}-\w+-\d{4})"

test_str = "blah blah Start: 01-Oct-2018 blah blah End: 30-Sep-2019"
# test_str = "test test Start:01-06-2018 blah blah End: 30-08-2019"

match = re.findall(regex,test_str)
print(match)
# ['Start: 01-Oct-2018', 'End: 30-Sep-2019']
0 голосов
/ 06 декабря 2018

Это, кажется, делает это:

re.findall(r'\b\S+\s+\d\d?-[A-Za-z]{3}-\d{4}\b', text)

возвращает:

['Start: 01-Oct-2018', 'End: 30-Sep-2019']

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

0 голосов
/ 06 декабря 2018

Поздний ответ, но вот способ сделать это:

[^ ]+: [^ ]+

import re
text = 'blah blah Start: 01-Oct-2018 blah blah End: 30-Sep-2019'
result = re.findall("[^ ]+: [^ ]+", text)
# ['Start: 01-Oct-2018', 'End: 30-Sep-2019']
0 голосов
/ 06 декабря 2018

Полагаю, вы ищете что-то подобное?(?i)start:\s*(?<start>\d\d-\w+-\d{4}).*end:\s*(?<end>\d\d-\w+-\d{4})

Демо

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