Python正则实现仅将文本中十进制数字的逗号替换为小数点
问题原因
- 你在正则表达式和替换字符串中没有使用Python原始字符串标识
r,\1会被Python解析为ASCII控制字符而非正则反向引用,这是你出现方块乱码的直接原因。 - 第一种错误写法完全搞反了匹配逻辑,你是在把「数字.数字」替换为「数字,数字」,和你的需求完全相反。
- 第三种写法的核心问题同样是缺少原始字符串标识,反向引用失效导致替换结果不符合预期。
正确实现
使用带原始字符串标识的正则即可,只会匹配前后都是数字的逗号进行替换,其余逗号不受影响:
import re Data_preprocessing['tweet_without_stopwords'] = Data_preprocessing['tweet_without_stopwords'].apply( lambda x: re.sub(r"(\d+),(\d+)", r"\1.\2", str(x)) )
如果需要兼容带负号的小数(比如-123,45),可以使用更严谨的正则版本:
re.sub(r"(-?\d+),(\d+)", r"\1.\2", str(x))
内容的提问来源于stack exchange,提问作者kostya ivanov
相关产品推荐
相关产品推荐

