gpt4 book ai didi

Python正则表达式选择所有不匹配模式的元素

转载 作者:行者123 更新时间:2023-12-02 19:06:30 25 4
gpt4 key购买 nike

我昨天问了类似的问题Keep elements with pattern in pandas series without converting them to list现在我面临着相反的问题。

我有一个 pandas 数据框:

import pandas as pd
df = pd.DataFrame(["Air type:1, Space kind:2, water, wood", "berries, something at the start:4, Space blu:3, somethingelse"], columns = ['A'])

我想选择所有没有“:”的元素。我尝试的是以下似乎有效的正则表达式:

df['new'] = df.A.str.findall('(^|\s)([^:,]+)(,|$)')
A new
0 Air type:1, Space kind:2, water, wood [( , water, ,), ( , wood, )]
1 berries, something at the start:4, Space blu:3, somethingelse [(, berries, ,), ( , somethingelse, )]

如果我理解正确的话,findall 会搜索 3 种模式(我在括号中的模式)并返回尽可能多的在列表中包含的元组中找到的模式。有没有办法避免这种情况并仅返回中间模式?就第一行而言:水、木头第二行:浆果,其他东西

我也尝试了相反的方法:

df.A.str.replace('[^\s,][^:,]+:[^:,]+', '').str.replace('\s*,', '')

这似乎与我想要的很接近(仅缺少模式之间的逗号),但我想知道我是否缺少一些可以让我的生活更轻松的东西。

最佳答案

您可以使用此正则表达式代码:

>>> df['new'] = df.A.str.findall(r'(?:^|,)([^:,]+)(?=,|$)')
>>> print (df)
A new
0 Air type:1, Space kind:2, water, wood [ water, wood]
1 berries, something at the start:4, Space blu:3... [berries, somethingelse]

使用的正则表达式是:

(?:^|,):匹配开始或逗号

  • ([^:,]+):匹配 1+ 任何非 : 且非 ,<
  • (?=,|$):先行断言我们前面有 或行尾

关于Python正则表达式选择所有不匹配模式的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64981401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com