我想用python中的regex将一个字符串中的大写字母开始的地方分开,但如果其前面有连字符,则不能分开。

问题描述 投票:0回答:1

我很难找到以下问题的直接解决方案。

我在一个数据框中有一列,其中有字符串项,如:"我想在大写字母开始的地方分开一个字符串,但如果前面有连字符,则不能分开。

'RosemontCentral'

'Dollard-des-OrmeauxEast'

我想在大写字母开始的地方分开一个字符串 但如果它的前面有连字符就不分开了

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

'RosemontCentral' to 'Rosemont Central'

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

到目前为止,我有bellow regex功能。它对于像第一个项目这样没有连字符的项目做得相当好。但是,对于那些有连字符的项目就不行了。此外,下面的 regex 函数在字符串的开头增加了一个不理想的前导空格。比如下面这个。

'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

谢谢你的时间

python regex pandas string
1个回答
2
投票

你可以尝试在你的regex模式中添加一个lookbehind,它可以断言大写字母前面有一个非斜线字符。

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

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

2
投票

这样就可以了

def add_space(Neighborhood):
        return re.sub("([a-z])([A-Z])","\g<1> \g<2>",Neighborhood)

add_space('Dollard-des-OrmeauxEast')
# 'Dollard-des-Ormeaux East'

add_space('RosemontCentral')
# 'Rosemont Central'
© www.soinside.com 2019 - 2024. All rights reserved.