鱼C论坛

 找回密码
 立即注册
查看: 3403|回复: 10

python3.5.2 一个简单的正则表达式为何如此慢?

[复制链接]
发表于 2016-9-10 23:09:21 | 显示全部楼层 |阅读模式
10鱼币
  1. # coding:utf8
  2. import re

  3. txt = '''
  4. gend>
  5.                                                                 <span id="Label4"><b><font size="4">在校学习成绩</font></b></span>
  6.                                                                 <span id="xftj"><b>所选学分50;获得学分50;重修学分。</b></span>
  7.                                                         </legend>
  8.                                                         <div id="divShow1"><table class="datelist" id="Datagrid1" border="0" cellpadding="3" cellspacing="0" width="100%">
  9.         <tbody><tr class="datelisthead">
  10.                 <td>学年</td><td>学期</td><td>课程代码</td><td>课程名称</td><td>课程性质</td><td>课程归属</td><td>学分</td><td>绩点</td><td>成绩</td><td>辅修标记</td><td>补考成绩</td><td>重修成绩</td><td>学院名称</td><td>备注</td><td>重修标记</td>
  11.         </tr><tr>
  12.                 <td>2015-2016</td><td>1</td><td>2701010203</td><td>MS Office高级(二级)</td><td>必修课</td><td>&nbsp;</td><td>4</td><td>2</td><td>74</td><td>0</td><td>&nbsp;</td><td>&nbsp;</td><td>计算机与信息工程系</td><td>&nbsp;</td><td>0</td>
  13.         </tr><tr class="alt">
  14.                 <td>2015-2016</td><td>1</td><td>2701010101</td><td>高等数学Ⅰ</td><td>必修课</td><td>&nbsp;</td><td>4</td><td>4</td><td>94</td><td>0</td><td>&nbsp;</td><td>&nbsp;</td><td>计算机与信息工程系</td><td>&nbsp;</td><td>0</td>
  15.         </tr><tr>
  16.                 <td>2015-2016</td><td>1</td><td>2701010103</td><td>计算机导论</td><td>必修课</td><td>&nbsp;</td><td>4</td><td>4</td><td>95</td><td>0</td><td>&nbsp;</td><td>&nbsp;</td><td>计算机与信息工程系</td><td>&nbsp;</td><td>0</td>
  17.         </tr><tr class="alt">
  18.                 <td>2015-2016</td><td>1</td><td>2701010105</td><td>计算机专业英语</td><td>必修课</td><td>&nbsp;</td><td>4</td><td>4</td><td>93.5</td><td>0</td><td>&nbsp;</td><td>&nbsp;</td><td>计算机与信息工程系</td><td>&nbsp;</td><td>0</td>
  19.         </tr><tr>
  20.                 <td>2015-2016</td><td>1</td><td>2701010104</td><td>线性代数</td><td>必修课</td><td>&nbsp;</td><td>4</td><td>4</td><td>90</td><td>0</td><td>&nbsp;</td><td>&nbsp;</td><td>计算机与信息工程系</td><td>&nbsp;</td><td>0</td>
  21.         </tr><tr class="alt">
  22.                 <td>2015-2016</td><td>1</td><td>0000090418</td><td>英语(本)</td><td>必修课</td><td>&nbsp;</td><td>4</td><td>4</td><td>92.5</td><td>0</td><td>&nbsp;</td><td>&nbsp;</td><td>公共教学部</td><td>&nbsp;</td><td>0</td>
  23.         </tr><tr>
  24.                 <td>2015-2016</td><td>2</td><td>0000090409</td><td>大学语文</td><td>公选课</td><td>&nbsp;</td><td>2.0</td><td>4</td><td>98.5</td><td>0</td><td>&nbsp;</td><td>&nbsp;</td><td>教务处</td><td>&nbsp;</td><td>0</td>
  25.         </tr><tr class="alt">
  26.                 <td>2015-2016</td><td>2</td><td>2701010102</td><td>高等数学Ⅱ</td><td>必修课</td><td>&nbsp;</td><td>4</td><td>4</td><td>94</td><td>0</td><td>&nbsp;</td><td>&nbsp;</td><td>计算机与信息工程系</td><td>&nbsp;</td><td>0</td>
  27.         </tr><tr>
  28.                 <td>2015-2016</td><td>2</td><td>2701010202</td><td>计算机网络</td><td>必修课</td><td>&nbsp;</td><td>5</td><td>4</td><td>94</td><td>0</td><td>&nbsp;</td><td>&nbsp;</td><td>计算机与信息工程系</td><td>&nbsp;</td><td>0</td>
  29.         </tr><tr class="alt">
  30.                 <td>2015-2016</td><td>2</td><td>0000090420</td><td>马克思主义基本原理概论</td><td>必修课</td><td>&nbsp;</td><td>2.0</td><td>3</td><td>80</td><td>0</td><td>&nbsp;</td><td>&nbsp;</td><td>教务处</td><td>&nbsp;</td><td>0</td>
  31.         </tr><tr>
  32.                 <td>2015-2016</td><td>2</td><td>2701010201</td><td>面向对象程序设计C++</td><td>必修课</td><td>&nbsp;</td><td>5</td><td>4</td><td>90</td><td>0</td><td>&nbsp;</td><td>&nbsp;</td><td>计算机与信息工程系</td><td>&nbsp;</td><td>0</td>
  33.         </tr><tr class="alt">
  34.                 <td>2015-2016</td><td>2</td><td>0000090416</td><td>体育(必修本)</td><td>必修课</td><td>&nbsp;</td><td>2.0</td><td>3</td><td>89.5</td><td>0</td><td>&nbsp;</td><td>&nbsp;</td><td>公共教学部</td><td>&nbsp;</td><td>0</td>
  35.         </tr><tr>
  36.                 <td>2015-2016</td><td>2</td><td>0000130325</td><td>心理健康教育</td><td>必修课</td><td>&nbsp;</td><td>2.0</td><td>3</td><td>81.5</td><td>0</td><td>&nbsp;</td><td>&nbsp;</td><td>教务处</td><td>&nbsp;</td><td>0</td>
  37.         </tr><tr class="alt">
  38.                 <td>2015-2016</td><td>2</td><td>0000090418</td><td>英语(本)</td><td>必修课</td><td>&nbsp;</td><td>4</td><td>4</td><td>91</td><td>0</td><td>&nbsp;</td><td>&nbsp;</td><td>公共教学部</td><td>&nbsp;</td><td>0</td>
  39.         </tr>
  40. </tbody></table>
  41.                                                                 <table width="100%">
  42.                                                                         <tbody><tr>
  43.                                                                                 <td colspan="2" valign="top" width="400"><table class="datelist" id="Datagrid2" border="0" cellpadding="3" cellspacing="0" width="454">
  44.         <tbody><tr class="datelisthead">
  45.                 <td>课程性质名称</td><td>学分要求</td><td>获得学分</td><td>未通过学分</td><td>还需学分</td>
  46.         </tr><tr>
  47.                 <td>必修课</td><td>0</td><td>48</td><td>0</td><td>0</td>
  48.         </tr><tr class="alt">
  49.                 <td>实践课</td><td>0</td><td>0</td><td>0</td><td>0</td>
  50.         </tr><tr>
  51.                 <td>系选课</td><td>0</td><td>0</td><td>0</td><td>0</td>
  52.         </tr><tr class="alt">
  53.                 <td>公选课</td><td>0</td><td>2</td><td>0</td><td>0</td>
  54.         </tr><tr>
  55.                 <td>选修课</td><td>0</td><td>0</td><td>0</td><td>0</td>
  56.         </tr><tr class="alt">
  57.                 <td><b>合计</b></td><td>0</td><td>50</td><td>0</td><td>0</td>
  58.         </tr>
  59. </tbody></table></td>
  60.                                                                                 <td colspan="2" valign="top"><table class="datelist" id="DataGrid6" border="0" cellpadding="3" cellspacing="0" width="456">
  61.         <tbody><tr class="datelisthead">

  62. </body></html>'''

  63. pat = re.compile('''(Datagrid1)(.|\s)*(DataGrid2)''')

  64. ret = pat.search(txt)
复制代码





直接卡死了。不知道啥原因。。请求大家帮助!

最佳答案

查看完整内容

我这里没问题,~ 结果:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-10 23:09:22 | 显示全部楼层
浮砂 发表于 2016-9-11 08:52
可是这样还是很慢。。真是没有头绪了。。

我这里没问题,~
  1. import time,re
  2. s=time.time()
  3. pat = re.compile(r'<table[^>]+?id="Datagrid1".+?</table>',re.S)
  4. ret = pat.search(txt)
  5. e=time.time()
  6. print('耗时:%f'%(e-s),'\n',ret.group(0)[:100])
复制代码

结果:
  1. 耗时:0.000000
  2. <table class="datelist" id="Datagrid1" border="0" cellpadding="3" cellspacing="0" width="100%">
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-10 23:53:20 | 显示全部楼层
你想匹配什么呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-11 03:34:38 | 显示全部楼层
r前缀

pat = re.compile(r'<table[^>]+?id="Datagrid1".+?</table>',re.S)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-9-11 08:51:46 | 显示全部楼层
sqd 发表于 2016-9-10 23:53
你想匹配什么呢?

我想匹配第9行到第33行末尾,他们之间的文本。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-9-11 08:52:18 | 显示全部楼层

可是这样还是很慢。。真是没有头绪了。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-9-11 10:58:40 | 显示全部楼层
SixPy 发表于 2016-9-10 23:09
我这里没问题,~

结果:

你的正则表达式简直太巧妙了。谢谢你帮了我许多忙。。~~我要更努力学习Python··
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-9-11 11:01:44 | 显示全部楼层

请问  +?  组合在一起跟 .* 有什么区别吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-11 13:11:58 | 显示全部楼层
浮砂 发表于 2016-9-11 11:01
请问  +?  组合在一起跟 .* 有什么区别吗

看小甲鱼的视频教程~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-12 13:23:51 | 显示全部楼层
围观
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-12 13:24:53 | 显示全部楼层
围观
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-22 17:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表