Матч точка за годом и удалить его - PullRequest
4 голосов
/ 26 марта 2019

Я ищу регулярное выражение для удаления всех точек после года в строке.

Я знаю, что для нацеливания на интервалы лет и лет я могу использовать

\s*\d{4}(?:\s*-\s*\d{4})?

Нокак мне получить только точку?

Например, если у меня есть "ABCD 2009. DEF", я хочу получить "ABCD 2009 DEF"

Ответы [ 2 ]

3 голосов
/ 26 марта 2019

Вы можете использовать положительный вид сзади нулевой ширины ((?<=\b\d{4})), чтобы убедиться, что ., который вы хотите заменить, предшествует четыре цифры:

In [1820]: str_ = 'ABCD 2009. DEF'                                                                                                                                                                          

In [1821]: re.sub(r'(?<=\b\d{4})\.', '', str_)                                                                                                                                                              
Out[1821]: 'ABCD 2009 DEF'

In [1822]: str_ = 'ABCD 2009. DEF 2019. FOO'                                                                                                                                                                

In [1823]: re.sub(r'(?<=\b\d{4})\.', '', str_)                                                                                                                                                              
Out[1823]: 'ABCD 2009 DEF 2019 FOO'
3 голосов
/ 26 марта 2019

Вы можете обернуть имеющийся у вас шаблон группой захвата и добавить \.+ после него (для соответствия одной или нескольким точкам) и заменить на \1 (чтобы вернуть год в результирующую строку):

re.sub(r'(\s*\d{4}(?:\s*-\s*\d{4})?)\.+', r'\1', s)

См. Демоверсию regex .

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