【问题标题】:Find string, extract value [duplicate]查找字符串,提取值[重复]
【发布时间】:2019-12-24 01:14:18
【问题描述】:

我正在尝试解析 Python 中包含内联脚本的 HTML。我需要在脚本中找到一个字符串,然后提取该值。在过去的几个小时里,我一直在尝试在regex 中执行此操作,但我仍然不相信这是正确的方法。

这是一个示例:

['key_to_search_for']['post_date'] = '10 days ago';

我要提取的结果是:10 days ago

这个正则表达式让我了解了一部分,但我无法弄清楚完整的匹配:

^\[\'key_to_search_for\'\]\[\'post_date\'\] = '(\d{1,2})+( \w)

Regex playground

但是,即使我可以匹配regex,我也不确定仅获得价值的最佳方式。我正在考虑用空格替换键,例如 .replace('['key_to_search_for']['post_date'] = '',''),但这似乎效率低下。

我应该匹配regex 然后替换吗?有没有更好的方法来处理这个?

【问题讨论】:

  • 用正则表达式解析 html 是错误的,但显示更多上下文,显示 html 上下文 - 因为现在它似乎只是一个常规字符串,可能是“正则表达式”
  • 您可以使用单个捕获组提取值^\['key_to_search_for'\]\['post_date'\] = '(\d{1,2} \w+ \w+)';$ 参见regex101.com/r/ee60zU/1
  • @RomanPerekhrest 我正在使用漂亮的汤来解析 HTML,但漂亮的汤不处理内联脚本。 stackoverflow.com/questions/38547569/…

标签: python regex


【解决方案1】:

您可以使用单个捕获组提取值,并使用\w+ 的量词匹配这两个词。

该值在捕获组 1 中。

^\['key_to_search_for'\]\['post_date'\] = '(\d{1,2} \w+ \w+)';$

Regex demo

或使用与除' 之外的任何字符匹配的否定字符类

^\['key_to_search_for'\]\['post_date'\] = '([^']+)';$

Regex demo

【讨论】:

    猜你喜欢
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多