正则表达式对由空格分隔的单词进行分组

我有一个数据框,其中一列是一系列字符串,其中不同的短语是单个单词或由空格分隔的多个单词;每个单词的第一个字母是大写的(例如分别是“Strawberry”或“Strawberry Jam”)。相反,如果不是同一短语的一部分,则单词不会被间隔开(例如“JamApple”)。

df = pd.DataFrame({
    'foo': ['Strawberry JamApple', 'BananaPear CrumblePotato', 'Almond Cake'],
    'bar': ['A', 'B', 'C'],
    'baz': [1, 2, 3],
    'zoo': ['x', 'y', 'z'],
})


                        foo bar  baz zoo
0       Strawberry JamApple   A    1   x
1  BananaPear CrumblePotato   B    2   y
2               Almond Cake   C    3   z

我如何使用正则表达式根据上述规则将字符串中的短语分开(分为“草莓酱”、“苹果”、“香蕉”、“梨碎”、“土豆”、“杏仁蛋糕”)。并提取它们?即,获取以下数据框:

   foo
0  Strawberry Jam
0  Apple
1  Banana
1  Pear Crumble
1  Potato
2  Almond Cake

我从以下代码开始:

df.loc[:, 'foo'].str.extractall('([A-Z]{1}[a-z]+)').copy()

但是,这将所有单词分开,并且不使用空格来“连接”它们。我将如何包括后者?

谢谢。

回答

Series.str.split + explode

df['foo'].str.split(r'(?<=[a-z])(?=[A-Z])').explode()

0    Strawberry Jam
0             Apple
1            Banana
1      Pear Crumble
1            Potato
2       Almond Cake
Name: foo, dtype: object

正则表达式详细信息:

  • (?<=[a-z]): Positive Lookbehind 匹配范围内的单个字符az

  • (?=[A-Z]) : Positive Lookahead 匹配范围内的单个字符AZ

regex demo

  • Great answer!!!

以上是正则表达式对由空格分隔的单词进行分组的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>