结合正面和负面的前瞻

时间:2021-02-02 12:58:29

标签: python regex pandas

我正在使用 python,并且必须在 dict 中处理几个键顺序选项以清除单引号。 dict 现在仍然是一个字符串,因为我无法将其转换为 dict。

例如,清除第一个选项的 name 很容易,并且可以通过

df.loc[:,'general_data'].str.replace(r"('name': ')(.*)(', 'phone')", 
                                            lambda x: x.group(1) + x.group(2).replace("'", "") + x.group(3), regex=True)

这解决了这里看到的第一个组合

"{'city': '1111 Doecity', 'name': 'Ben's Carrepair', 'phone': '0211222222', 'street': 'Unter'm Bobbele 39'}"

所以所有不必要的单引号都被删除了。 name 的结果是

Bens Carrepair

如果没有电话号码 street 应该像以前使用的名字一样使用。

第二个字符串选项是:

"{'city': '1111 Doecity', 'name': 'Ben's Carrepair', 'street': 'Unter'm Bobbele 39'}"

所以我的问题是如何像 IF - ELSE - 结构 那样组合前瞻,以便如果没有电话号码,则该组仅限于 ' street' 就像在工作示例中一样,直到 'phone'

此处显示的数据包含在 pandas 数据框列中。 如果有任何要求,请随时询问。我#通常不经常使用正则表达式..

1 个答案:

答案 0 :(得分:2)

你可以使用

pattern = r"(?<='name': ').*?(?=', '(?:street|phone)')"
df['general_data'].str.replace(pattern,  lambda x: x.group().replace("'", ""))

也就是说,您可以通过在模式中使用环视来简化替换,以匹配 'name': '', 'street'', 'phone' 之间最少数量的字符,并且您只需要删除 { {1}} 第 0 组,整场比赛。