当前位置: 首页 > 知识库问答 >
问题:

将由空格分隔的单词分组的正则表达式

燕昊东
2023-03-14

我有一个数据帧,其中一列是一系列字符串,其中截然不同的短语要么是单个单词,要么是用空格分隔的多个单词;每个单词的第一个字母都是大写字母(例如“草莓”或“草莓果酱”)。相反,如果这些词不是同一短语的一部分,则不会间隔开(例如“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

我如何使用regex在一个字符串中根据上面的规则将短语分开(分为“草莓果酱”、“苹果”、“香蕉”、“梨碎”、“土豆”、“杏仁蛋糕”)。然后提取他们?即获得以下数据帧:

   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()

但是,这把所有的词都分开了,并没有用空间把它们“连接”起来。我如何包括后者?

多谢了。

共有1个答案

田马鲁
2023-03-14
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

请参阅正则表达式演示

 类似资料:
  • 我想验证由一些分隔符分隔的单词输入。本例中的分隔符是“|”符号,前后用空格分隔 到目前为止,我只听到了第一个单词,下面是rejex: 如何用空格和分隔符分隔单词或数字?PS仍在学习教程。任何帮助都将不胜感激 为了进一步澄清,我正在为上面的dojo dijit小部件寻找正则表达式,以正确验证输入。

  • 我正在寻找一个正则表达式来验证C#中的输入。正则表达式必须匹配任意数量的单词,这些单词之间只有一个空格字符。匹配的字符串不能以空格字符开头或结尾(这就是我的问题所在)。 示例: 我尝试过的:这个模式几乎满足了需要,但它也匹配1个尾随空间。 有什么想法吗?谢谢

  • 我正在尝试使用正则表达式验证ruby类中文本字段中逗号分隔的单词字符串。以下应该是有效的: 以下内容应无效: 我以为这能行 在Rubular上,它似乎是有效的,但当我在我的类中进行如下验证时,它会接受应该是无效字符串的内容。 我不确定我的问题是在于正则表达式还是验证方法本身。感谢任何帮助。

  • 我想匹配单词的一部分,如果模式中单词的长度小于我匹配的字符串,则可以匹配,例如: 输出为true。但是,如果单词长度较大,则返回false,例如: 那么,我怎样才能只匹配单词的一部分呢?

  • 我正在编写一个正则表达式来截断第二个字段。我已经写了一个正则表达式,但它不是在所有情况下都有效。 数据: 输出应为: 我的正则表达式: 链接到测试正则表达式https://regex101.com/r/P0Rnku/1

  • 我试图找出这种情况下的正则表达式模式,以便序列化结果: 我想捕捉所有有限制的单词/单词组合: 只有单词,没有数字或字符,除了撇号 中间有空格的单词要包含在一起 到目前为止,我已经想出了: 但我有尾随空格。所以这和“七月”匹配,而不是“七月”。如何在保留单词之间的空格的同时防止尾随空格。