pandas str.replace正则替换如何排除非独立单词的部分匹配
解决方案
你需要使用正则的单词边界标识符\b来限定只匹配独立的hi/hello完整单词,避免命中其他单词内部的字符片段。
正确代码如下:
import re import pandas as pd a1 = pd.Series('12:04:25 Roberts: Hi, Hello, hi this hi') # 用\b限定单词边界 res = a1.str.replace(r'\b(hello|hi)\b', '111', regex=True, flags=re.IGNORECASE)
运行后输出结果符合预期:
12:04:25 Roberts: 111, 111, 111 this 111
原理说明
\b属于正则中的单词边界元字符,匹配的是「单词字符(字母、数字、下划线)」和「非单词字符」的交界位置,能保证匹配到的hi/hello是独立单词,不会命中this这类包含hi字符片段的单词。
你之前写法的问题:
- 第一种写法没有匹配范围限制,只要连续出现hi/hello字符就会被替换,因此会误替换this里的hi
- 第二种和第三种写法里的
^和$代表整个字符串的开头和结尾,只能匹配整个字符串就是hi的情况,无法匹配句子中间的hi
内容的提问来源于stack exchange,提问作者user5843090
相关产品推荐
相关产品推荐

