如何使用正则删除两个分隔符之间的数字?
特殊分隔符内数字的精准删除方案
问题背景
有一段包含特殊分隔符的文本,需要仅删除该分隔符之间的数字,保留分隔符内的其他内容以及分隔符外的所有内容(包括正常数字)。
原始无效数据:
trueText = ' 23 Wolkenvelden en lokaal wat regen. In de ochtend op steeds meer plaatsen droog en 24 zon. In de avond kans op onweer,met name in Zeeland. 22 20 23 = max. temp. vandaag '
之前尝试的代码问题:
trueText = re.sub('[^]+', ' ', trueText)
这段代码会直接删除之间的所有内容,不符合仅删除数字的需求。
解决方案
方案一:精准匹配分隔符内的数字并删除
利用正则的正向/反向预查定位分隔符范围,配合回调函数删除其中的数字:
import re trueText = ' 23 Wolkenvelden en lokaal wat regen. In de ochtend op steeds meer plaatsen droog en 24 zon. In de avond kans op onweer,met name in Zeeland. 22 20 23 = max. temp. vandaag ' # 仅删除之间的数字 trueText = re.sub(r'(?<=)[^]*?(\d+)[^]*?(?=)', lambda m: m.group(0).replace(m.group(1), ''), trueText) print(trueText)
逻辑说明:
(?<=):反向预查,确保当前位置前是分隔符[^]*?(\d+)[^]*?(?=):匹配分隔符内包含数字的片段,捕获数字为分组1- 回调函数将匹配到的片段中的数字(分组1)替换为空,保留其他内容
方案二:先匹配分隔符内所有内容,再批量删除其中数字
先定位所有之间的内容,再在每个匹配结果中删除数字:
import re trueText = ' 23 Wolkenvelden en lokaal wat regen. In de ochtend op steeds meer plaatsen droog en 24 zon. In de avond kans op onweer,met name in Zeeland. 22 20 23 = max. temp. vandaag ' def remove_digits_in_sep(match): # 删除匹配到的分隔符内的所有数字 return re.sub(r'\d+', '', match.group(0)) trueText = re.sub(r'[^]+', remove_digits_in_sep, trueText) print(trueText)
逻辑说明:
[^]+:匹配所有被包裹的内容- 回调函数
remove_digits_in_sep将每个匹配结果中的数字全部删除,再替换回原文本
内容的提问来源于stack exchange,提问作者Ray004
相关产品推荐
相关产品推荐

