Я пытаюсь использовать RegEx в Python, чтобы разделить строку, которая начинается с чего угодно и может закончиться или не заканчиваться годом в круглых скобках, в две группы, где первые группы должны содержать все, кроме года, а второй должен содержать только год или ничего, если нет года.Разделительная строка с дополнительным годом
Это то, что я до сих пор:
string1 = 'First string'
string2 = 'Second string (2013)'
p = re.compile('(.*)\s*(?:\((\d{4,4})\))?')
print(p.match(string1).groups())
print(p.match(string2).groups())
, который возвращает код это:
('First string', None)
('Second string (2013)', None)
Но я пытаюсь получить это:
('First string', None)
('Second string', '2013')
Я понимаю, что первая часть моего RegEx жадна, но я не могу найти способ сделать ее не жадным, не имея ничего общего. Кроме того, первая часть моей строки может содержать больше или меньше всего (включая круглые скобки и числа).
Я понимаю, что есть способы, которыми я могу обойти это, но так как я пытаюсь изучить RegEx, я бы предпочел решение RegEx.
[* Некоторые люди, столкнувшись с проблемой, думают: «Я знаю, я буду использовать регулярные выражения». Теперь у них есть две проблемы. *] (Http://regex.info/blog/2006-09-15/247) - [Джейми Завински] (https://en.wikipedia.org/wiki/Jamie_Zawinski) –
Возможный дубликат из [Как я могу опционально совместить дополнительную подстроку с регулярными выражениями Python?] (http://stackoverflow.com/questions/17936594/how-do-i-optionally-match-an-additional-substring-with-python -regular -expression) –
Я думаю, что ваше обучение ошибочно. Вы должны научиться использовать регулярное выражение для вещей, которые упрощаются с помощью регулярных выражений. Регулярное выражение не упрощается. С помощью регулярных выражений в Python почти ничего не получается. – ArtOfWarfare