当前位置: 首页 > 编程笔记 >

Python通过正则表达式选取callback的方法

唐高朗
2023-03-14
本文向大家介绍Python通过正则表达式选取callback的方法,包括了Python通过正则表达式选取callback的方法的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了Python通过正则表达式选取callback的方法。分享给大家供大家参考。具体如下:

最近在瞎想怎么通过xpath去精确抓取文章的正文,跟parselets类似的想法,只不过更简单。

代码设计上采用正则表达式匹配URL,再选择callback handler的方式,主要参考web.py的分发器(Dispatcher)。

当然,这个实现比较老土一些,全部用function的方式回调,没有用类。

#!/bin/env python
import re, sys
# Define parser first.
def baidu(username):
  # Business logic
  return "Using parser Baidu. and the user's name is: %s." % username
def qzone(uin):
  # Business logic
  return "Using parser Qzone, and the user's QQ is: %s." % uin
# From web.py
def group(seq, size):#{{{
  """
  Returns an iterator over a series of lists of length size from iterable.
    >>> list(group([1,2,3,4], 2))
    [[1, 2], [3, 4]]
    >>> list(group([1,2,3,4,5], 2))
    [[1, 2], [3, 4], [5]]
  """
  def take(seq, n):
    for i in xrange(n):
      yield seq.next()
  if not hasattr(seq, 'next'):
    seq = iter(seq)
  while True:
    x = list(take(seq, size))
    if x:
      yield x
    else:
      break
#}}}
def parser_init(url,mapping):
  for pat, what in group(mapping,2):
    result = re.compile('^' + pat + '$').match(url)
    if result:
      return what, [x for x in result.groups()]
  return None, None
if __name__ == '__main__':
  mapping = (
      'http://(?:hi|space).baidu.com/([^/]+)(?:/.*)?','baidu',
      'http://(\d+).qzone.qq.com(?:/.*)?','qzone',
      )
  (func, args) = parser_init(sys.argv[1],mapping)
  if func:
    callback = func
    if func in globals():
      callback = globals()[func]
    if callable(callback):
      print callback(*args)
  else:
    print 'No parser found.';

希望本文所述对大家的Pythonhtml" target="_blank">程序设计有所帮助。

 类似资料:
  • 问题内容: 我正在创建一个CSS编辑器,并试图创建一个可以从CSS文档获取数据的正则表达式。如果我拥有一个属性,则此正则表达式有效,但我无法使其对所有属性都有效。我在PHP中使用preg / perl语法。 正则表达式 测试用例 预期结果 实际结果 在此先感谢您的帮助-整个下午使我感到困惑! 问题答案: 对于单个正则表达式来说,这似乎太令人费解了。好吧,我敢肯定,通过正确的扩展,高级用户可以创建正

  • 问题内容: 我想使用Java正则表达式否定一组单词。 再说了,我想否定,,,。我写了一个正则表达式。 有些似乎不起作用。 问题答案: 试试这个: 如果不包含svn,cvs,nvs或mvc之一,则它将与文本匹配。 这是一个类似的问题:C#正则表达式要匹配不包含某个字符串的字符串?

  • 问题内容: 假设我想要一个正则表达式,使其与“从iPhone发送”和“从iPod发送”都匹配。我该如何写这样的表达? 我尝试过类似的事情: 但似乎不起作用。 问题答案:

  • 问题内容: 我试图在Python 2.7.2中使用正则表达式从字符串中提取所有出现的带标记单词。或者简单地说,我想提取标签内的所有文本。这是我的尝试: 印刷产品 要获取的正确正则表达式是: 或。 谢谢。:) 问题答案: 产量 regex与unicode完全相同,但难于阅读。 第一个括号组告诉重新任何列表中的字符应匹配,并且同样与第二组括号。那你想什么都不要。所以, 卸下外围的方括号。(也除去杂散前

  • 问题内容: 我正在尝试抓取“ ”标记后的所有内容并将其删除,但是我的代码似乎没有执行任何操作。难道不支持正则表达式? 问题答案: 否。Python中的正则表达式由模块处理。 一般来说:

  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?