一年后匹配点并将其删除

时间:2019-03-26 19:20:10

标签: python regex

我正在寻找一个正则表达式来删除字符串中一年后的所有点。

我知道可以使用年和年间隔作为目标

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

但是我如何只捕获点?

例如,如果我拥有“ ABCD 2009. DEF”,我想获得“ ABCD 2009 DEF”

2 个答案:

答案 0 :(得分:3)

您可以将捕获的模式包装到捕获组中,并在其后添加\1(以匹配一个或多个点),并替换为re.sub(r'(\s*\d{4}(?:\s*-\s*\d{4})?)\.+', r'\1', s) (将年份放回结果字符串中) :

{{1}}

请参见regex demo

答案 1 :(得分:3)

您可以利用零宽度正向后缀((?<=\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'