Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 年复一年地匹配圆点并将其移除_Python_Regex - Fatal编程技术网

Python 年复一年地匹配圆点并将其移除

Python 年复一年地匹配圆点并将其移除,python,regex,Python,Regex,我正在寻找一个正则表达式来删除一年后的所有点 我知道我可以使用目标年份和年份间隔 \s*\d{4}(?:\s*-\s*\d{4})? 但是我怎样才能只捕捉点呢 例如,如果我有“ABCD 2009.DEF”,我想得到“ABCD 2009 DEF”你可以用一个捕获组包装你的模式,然后在它后面添加\.+(匹配一个或多个点),并替换为\1(将年份放回结果字符串中): 请参阅。您可以利用零宽度正lookbhind((?)? re.sub(r'(\s*\d{4}(?:\s*-\s*\d{4})?)\.+'

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

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

\s*\d{4}(?:\s*-\s*\d{4})?
但是我怎样才能只捕捉点呢


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

你可以用一个捕获组包装你的模式,然后在它后面添加
\.+
(匹配一个或多个点),并替换为
\1
(将年份放回结果字符串中):


请参阅。

您可以利用零宽度正lookbhind(
(?)?
re.sub(r'(\s*\d{4}(?:\s*-\s*\d{4})?)\.+', r'\1', s)
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'