使用正则表达式从python中的字符串中删除花括号

时间:2013-07-27 01:23:24

标签: python regex string

我想要一个正则表达式来搜索logger.error("pbType",

并排除{}的内容,例如:

logger.info("URL:\n\"{}\"\n",

这对我不起作用 - re.search('.*logger.*"[\w.:-_()\[\]]*"\s*,',line)

它返回{}行。请帮忙谢谢

2 个答案:

答案 0 :(得分:2)

让我们看看你当前的正则表达式如何解析有问题的行:

.*|logger|      .*          |"|[\w.:-_()\[\]]*|"|\s*|,
  |      |                  | |               | |   |
  |logger|.info("URL:\n\"{}\|"|\n             |"|   |,

它将第三个引号作为正则表达式中的第一个引号。

要解决此问题,您需要确保".*"不会超过您想要的数量。

[^"\n]*logger[^"\n]*"[\w.:-_()\[\]]*"\s*,

此外,您当前的正则表达式中还有一些其他错误:

[ :-_ ]包括ascii范围58到95中的所有字符。如果要在字符集中包含减号,则必须先进行。

  [-\w.:_()\[\]]

将正则字符串用于正则表达式是一种很好的方式,因为您知道反斜杠将是反斜杠而不是触发转义序列。

 re.search(r'...', line)

你想确保"\s*,真正得到字符串的结尾,最后你可能会有一个\",{},所以匹配正则表达式中的行尾{ {1}}

总而言之,这些建议将使您的代码行成为:

...$

答案 1 :(得分:1)

只做一个if。不需要正则表达式 -

for i in l1:
    if not("{}" in i):
        l2.append(i)

l2是必需的结果,因为l1是你的字符串列表。