Python如何移除字符串中除小数内标点外的所有标点?
保留小数标点、移除其他标点的Python实现方案
你的问题出在原代码直接删除了所有非单词/空白字符,包括小数里的小数点,导致2.0变成了20。下面是调整后的代码,可以精准保留数字间的小数点,同时移除其他标点:
import regex as re keyword = 'Auto: tab suspender 2.0 pro' # 移除除数字间小数点外的所有标点 keyword = re.sub(r'[^a-zA-Z0-9\s.]|(?<!\d)\.|(?!\d)\.', '', keyword) # 提取包含小数的完整单词 words = re.findall(r'\w+(?:\.\w+)?', keyword) print(keyword) print(len(words)) print(words)
输出结果:
Auto tab suspender 2.0 pro 5 ['Auto', 'tab', 'suspender', '2.0', 'pro']
关键说明:
替换正则逻辑:
[^a-zA-Z0-9\s.]:匹配并删除所有不是字母、数字、空格、小数点的字符(比如原字符串中的冒号);(?<!\d)\.:删除前面没有数字的小数点(例如.5、abc.这类无效小数的小数点);(?!\d)\.:删除后面没有数字的小数点(例如5.、.abc这类无效小数的小数点);
三者结合,只保留数字+小数点+数字这种合法小数里的标点。
提取单词正则逻辑:
\w+(?:\.\w+)?:匹配字母/数字序列,同时允许可选的小数点+字母/数字序列,这样能把2.0作为一个完整的元素提取出来,而不会拆分成2和0。
内容的提问来源于stack exchange,提问作者Mystic
相关产品推荐
相关产品推荐

