我想用空格替换所有非字母字符,不包括 1950 到 2029 之间的年份。 例如:
ab-c 0123 4r。 a2017 2010 -> ab c r a 2010
到目前为止,我的尝试是尝试通过负面预测将日期列入黑名单:
re.sub('(?!\b19[5-9][0-9]\b|\b20[0-2][0-9]\b)([^A-Za-z]+)', ' ', string)
由于这不起作用,非常感谢任何帮助!
请您参考如下方法:
您可以使用一个简单的正则表达式并传递一个函数来检查它是否是一年:
import re
def replace_non_year_numbers(m):
number = int(m.group(0))
if 1950 <= number <= 2029:
return str(number)
else:
return ''
print(re.sub('\d+', replace_non_year_numbers, 'ab-c 0123 4r. a2017 2010'))
# 'ab-c r. a2017 2010'
为了保持正则表达式和逻辑简单,您可以在第二步中删除特殊字符:
only_years = re.sub('\d+', replace_non_year_numbers, 'ab-c 0123 4r. a2017 2010')
no_special_char = re.sub('[^A-Za-z0-9 ]', ' ', only_years)
print(re.sub(' +', ' ', no_special_char))
# ab c r a2017 2010
