为了账号安全,请及时绑定邮箱和手机立即绑定

删除特殊字符模式的正则表达式

删除特殊字符模式的正则表达式

胡子哥哥 2023-04-18 14:53:47
现在我在 pandas 数据框中得到了一个像这样的字符串"[""www.abccc.com"]"", "[""www.gsfa.com"]""所以我想做的是用正则表达式替换“[”和“]”我尝试了几种组合来首先抓住模式,例如:r' \["[""] 'r' [\"[""] 'r' [\"[\""] '一切都不起作用......当我在 regex101 中使用以下内容时:[\"[\"\"] 我为每个特殊字符匹配了 4 次,而不是一次匹配所有模式。任何人都可以让我知道,我该如何解决这个问题?
查看完整描述

5 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

您能做的最好的事情就是删除 the[""和 the ]"",这样剩下的就只有引号了。


import re

regex = r'(\[\"\"|\]\"\")'

data = r'"[""www.abccc.com"]"", "[""www.gsfa.com"]""'

print(re.sub(regex, '', data))

这给出:


"www.abccc.com", "www.gsfa.com"


查看完整回答
反对 回复 2023-04-18
?
守着一只汪

TA贡献1872条经验 获得超3个赞

import re

recheck = re.compile(r'\"[\[\]]\"\"')

print(recheck.sub(' ', r'"[""www.abccc.com"]"", "[""www.gsfa.com"]""'))

应该工作,它将匹配“,然后是[或],然后是两个“”。


括号表示 re 应该检查哪些字符,所以 [""] 最终匹配一个双引号,而 ["'] 将匹配一个字符的单引号或双引号。这就是为什么我的 re 匹配左边或三个双引号内的右括号。


查看完整回答
反对 回复 2023-04-18
?
慕森卡

TA贡献1806条经验 获得超8个赞

另一种选择:


import regex as re


rx = re.compile(r'(?:\G(?!\A)|\[)[^]]+')


some_junky_string = '"[""www.abccc.com"]"", "[""www.gsfa.com"]""'

content = [m.group(0).strip('"') for m in rx.finditer(some_junky_string)]

print(content)


查看完整回答
反对 回复 2023-04-18
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

你说你正在使用熊猫,所以你需要

df['col'] = df['col'].str.replace(r'"*\["*|"*]"*', '"')

解释

NODE                     EXPLANATION

--------------------------------------------------------------------------------

  "*                       '"' (0 or more times (matching the most

                           amount possible))

--------------------------------------------------------------------------------

  \[                       '['

--------------------------------------------------------------------------------

  "*                       '"' (0 or more times (matching the most

                           amount possible))

--------------------------------------------------------------------------------

 |                        OR

--------------------------------------------------------------------------------

  "*                       '"' (0 or more times (matching the most

                           amount possible))

--------------------------------------------------------------------------------

  ]                        ']'

--------------------------------------------------------------------------------

  "*                       '"' (0 or more times (matching the most

                           amount possible))


查看完整回答
反对 回复 2023-04-18
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

将匹配项替换为r'(\"\[\"|\"\]\")'空字符串 ( '') 即可得到您要查找的输出。

该模式使用匹配的捕获组:

  • "["字符串开头的前导

  • 尾随"]"字符串的末尾

将此作为第一个参数传递,re.sub(pattern, substitution, string)将空字符串作为第二个参数传递,将要操作的字符串作为第三个参数传递,将导致用空字符串替换上面定义的匹配项 - 让您只在开始和结束"时根据您的原始问题生成的字符串。

下面的完整示例。

import re


result = re.sub(r'(\"\[\"|\"\]\")', '', r'"[""www.abccc.com"]""')

print(result)


output: "www.abccc.com"


查看完整回答
反对 回复 2023-04-18
  • 5 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信