如何用Python在non/no与后续单词之间添加下划线?
在Python中为"non"/"no"与后续紧跟单词添加下划线的方法
核心方案:正则表达式 + Pandas 字符串替换
针对DataFrame中的文本内容,我们可以用正则表达式精准匹配"non"或"no"后跟单词字符的位置,然后在两者之间插入下划线。
代码示例
假设你的DataFrame有一个文本列text,处理代码如下:
import pandas as pd # 模拟输入DataFrame df = pd.DataFrame({ 'text': ['nonapple', 'nobanana', 'normal', 'nothing', 'no'] }) # 执行替换:在non/no和后续紧跟的字母间加下划线 df['text'] = df['text'].str.replace(r'(non|no)(?=[a-zA-Z])', r'\1_', regex=True) # 查看结果 print(df)
正则表达式说明
(non|no):捕获分组,匹配"non"或"no"这两个前缀(?=[a-zA-Z]):正向预查,确保前缀后面紧跟一个英文字母(保证是单词的起始部分)r'\1_':将捕获到的前缀(\1对应第一个分组的内容)后面追加下划线
处理所有文本列
如果需要对DataFrame中所有文本列批量处理,可以结合applymap和re.sub:
import pandas as pd import re df = pd.DataFrame({ 'col1': ['noncar', 'nocat'], 'col2': ['nonbook', 'notebook'] }) # 对所有字符串类型的单元格进行替换 df = df.applymap(lambda x: re.sub(r'(non|no)(?=[a-zA-Z])', r'\1_', x) if isinstance(x, str) else x)
适配带空格的场景
如果你的需求是处理"no apple"这类带空格的情况(即"non"/"no"和单词之间有空格),只需调整正则表达式:
df['text'] = df['text'].str.replace(r'(non|no)\s+(?=[a-zA-Z])', r'\1_', regex=True)
这里\s+匹配一个或多个空格,替换后会把空格换成下划线。
内容的提问来源于stack exchange,提问作者lionking19063
相关产品推荐
相关产品推荐

