Сопоставьте точку через год и удалите ее

#python #regex

#python #регулярное выражение

Вопрос:

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

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

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

Но как мне захватить только точку?

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

Ответ №1:

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

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

Смотрите демонстрацию регулярных выражений.

Ответ №2:

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

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

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

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

In [1823]: re.sub(r'(?<=bd{4}).', '', str_)                                                                                                                                                              
Out[1823]: 'ABCD 2009 DEF 2019 FOO'