【问题标题】:Using Multiline Regular Expressions in Python?在 Python 中使用多行正则表达式?
【发布时间】:2012-12-09 14:42:07
【问题描述】:

我在 Python 中使用正则表达式来搜索页面源,并在 javascript 中找到所有 json 信息。具体来说,示例如下所示:

变量 fooData = { 编号:123456789, 名称:“富吧”, 国家名称:“富”, country_is_eu:空, foo_bars:空, foo_email:空, foo_rate: 1.0, foo_id: 0987654321 };

我对了解正则表达式的所有知识还很陌生,我不确定我所做的是否正确。我可以得到一些单独的线路,但我不完全确定如何使用 re.MULTILINE。这是我现在拥有的代码:

prog = re.compile('[var ]?\w+ ?= ?{[^.*]+\n};', re.MULTILINE)
vars = prog.findall(text)

为什么这不起作用?

为了更清楚,我真的需要它来匹配这些括号之间的所有内容,如下所示:

变量 fooData = { };

所以,基本上我无法找到一种方法来匹配每一行,除了如下所示:

};

【问题讨论】:

  • checkout my response,我更新了,也许你想试试
  • 是的,谢谢你帮助我!没想到[^}]+这么简单,不知道你能做到。
  • 有一个内置的json 模块很有用。听起来您应该使用它而不是正则表达式。
  • 显然,当我拥有整个页面源时,要解析 json,我必须先找到它。

标签: python regex json python-2.7


【解决方案1】:

这是您要查找的内容,不包括括号:

(?<=var fooData = {)[^}]+(?=};)

【讨论】:

  • 谢谢!即使在我开始工作之后,我也很感激你为我提供的帮助。 ^_^
【解决方案2】:

当您不确定时,请始终查阅文档(这对 Python 来说非常好)。

multi-line mode 使正则表达式以插入符号 (^) 开头并以 ($) 结尾,以匹配每一行的开头和结尾(其中“行”是紧跟在换行符 \n 之后的任何内容) )。

您似乎已经通过在正则表达式的开头和结尾添加\ns 来解决此问题,并且您正在使用findall() 函数。

【讨论】:

  • 我正在使用findall(),因为我正在寻找所述模式的所有实例,并且我已经阅读了文档。
  • @yentup findall() 匹配正则表达式的所有实例,因此如果您在正则表达式的开头和结尾有 \n,那么多行模式是无用的。
  • 我知道findall() 的工作原理,我并不傻。我试图在整个页面中找到类似的所有内容,多行仅用于查找括号之间的所有随机信息。
【解决方案3】:

我明白了!结果发现甚至不需要多行模式,我只是匹配了括号之间所有不以; 结尾的行。我还稍微修改了查找括号等的正则表达式,这是我的代码:

re.findall('(?:var )?\w+[ ]?=[ ]?{\n(?:.+(?!(?<=;))\n)+};', text)

感谢 X.Jacobs,我将代码简化(并修复)为:

re.findall('(?:var )?\w+\s*=\s*{[^;]+};', text)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2020-06-03
    相关资源
    最近更新 更多