首页 > 解决方案 > 我想在大写字母开始的地方分隔一个字符串,但如果它前面有一个连字符,则在 python 中使用正则表达式

问题描述

我无法找到解决以下问题的直接解决方案。

我在数据框中有一列,其中有 str 项,例如:

'RosemontCentral'

'Dollard-des-OrmeauxEast'

我想在大写字母开始的地方分隔一个字符串,但如果它前面有一个连字符则不是。

例如:

'RosemontCentral''Rosemont Central'

'Dollard-des-OrmeauxEast'至 'Dollard-des-Ormeaux East'

到目前为止,我有波纹管正则表达式功能。对于第一个没有连字符的项目,它做得相当好。但是,不是那些有连字符的。此外,下面的正则表达式函数在字符串的开头添加了一个不需要的前导空格。比如下面这张。

' Dollard-des-Ormeaux East'

def add_space(Neighborhood):
        return re.sub( r"([A-Z])", r" \1", Neighborhood)

df['Neighborhood'] =  df['Neighborhood'].apply(add_space)

df

感谢您的时间

标签: pythonregexpandasstring

解决方案


您可以尝试在您的正则表达式模式中添加一个lookbehind,它断言一个非破折号字符在大写字母之前:

def add_space(Neighborhood):
    return re.sub(r'(?<=[^-])([A-Z])', r' \1', Neighborhood)

df['Neighborhood'] =  df['Neighborhood'].apply(add_space)

推荐阅读