正则表达式运行效率的问题

csproj 2010-06-11 10:42:41
有一个正则表达式,我用RegexTester.exe和MTracer.exe运行,都是瞬间的完成.(RegexTester 显示只要18ms)
可是自己写的代码半天都没响应.
这个是正则表达式:
(?=<INPUT TYPE="HIDDEN" NAME="line(?<rowid>\d*)")(?:[\s\S]*?(?=<TD)<TD[^>]*>(?<rowdata>[^<]*?)(?: )?<[\s\S]*?){11}</TR>[\s\S]+? (?<CHname>.+?) (?<ENname>.+?) [\s\S]+?(?:<TR[^<]*>\n(?:<TD>(?<detail>[^<].*)</TD>\n){3}</TR>\n)+</TABLE>

这个是代码:

Regex re = new Regex("(?=<INPUT TYPE=\"HIDDEN\" NAME=\"line(?<rowid>\\d*)\")(?:[\\s\\S]*?(?=<TD)<TD[^>]*>(?<rowdata>[^<]*?)(?: )?<[\\s\\S]*?){11}</TR>[\\s\\S]+? (?<CHname>.+?) (?<ENname>.+?) [\\s\\S]+?(?:<TR[^<]*>\\n(?:<TD>(?<detail>[^<].*)</TD>\\n){3}</TR>\\n)+</TABLE>", RegexOptions.None);

//Regex re = new Regex(@"(?=<INPUT TYPE=""HIDDEN"" NAME=""line(?<rowid>\d*)"")(?:[\s\S]*?(?=<TD)<TD[^>]*>(?<rowdata>[^<]*?)(?: )?<[\s\S]*?){11}</TR>[\s\S]+? (?<CHname>.+?) (?<ENname>.+?) [\s\S]+?(?:<TR[^<]*>\n(?:<TD>(?<detail>[^<].*)</TD>\n){3}</TR>\n)+</TABLE>", RegexOptions.None);

MatchCollection mc = re.Matches("text");
System.Console.WriteLine(mc.Count);








这个是部分原文件:(只有2行数据,实际20行数据用RegexTester 来匹配也是18秒)

<TABLE width="100%" border="1" cellspacing="0">
<TR class="shade" align="center" valign="bottom" bordercolor="blue">
<TD>行号</TD>
<TD>商品号</TD>
<TD colspan="2">条码</TD>
<TD>供应商货号</TD>
<TD>颜色</TD>
<TD>尺码</TD>
<TD>合计件数</TD>
<TD>单位</TD>
<TD>成本</TD>
<TD>外包/内盒装</TD>
<TD>成本合计</TD>
</TR>
<INPUT TYPE="HIDDEN" NAME="linecnt" VALUE="15"><TR class="yellow" align="center" valign="bottom" bordercolor="blue">
<TD>001 </TD>
<INPUT TYPE="HIDDEN" NAME="line1" VALUE="001"><TD>010058857 </TD>
<INPUT TYPE="HIDDEN" NAME="bitem1" VALUE="010058857"><TD>6922222098587 </TD>
<INPUT TYPE="HIDDEN" NAME="PO1081" VALUE="EN"><TD>EAN</TD>
<INPUT TYPE="HIDDEN" NAME="upc1" VALUE="6922222098587"><TD>09858 </TD>
<INPUT TYPE="HIDDEN" NAME="stock1" VALUE="09858"><TD> </TD>
<INPUT TYPE="HIDDEN" NAME="color1" VALUE=""><TD>22g </TD>
<INPUT TYPE="HIDDEN" NAME="size1" VALUE="22g"><TD align="right">80 </TD>
<INPUT TYPE="HIDDEN" NAME="qty1" VALUE="80.00"><INPUT TYPE="HIDDEN" NAME="ordqty1" VALUE="80"><TD>EA </TD>
<INPUT TYPE="HIDDEN" NAME="uom1" VALUE="EA"><TD align="right">.7693</TD>
<INPUT TYPE="HIDDEN" NAME="cost1" VALUE=".769"><TD>80/80<INPUT TYPE="HIDDEN" NAME="sellingUnits1" VALUE="1">
</TD>
<TD align="right">61.54<INPUT TYPE="HIDDEN" NAME="ecost1" VALUE="61.52">
</TD>
</TR>
<TR>
<TD></TD>
<TD colSpan="10"><TABLE width="100%" cellspacing="0" border="1" bordercolor="blue">
<TR class="sac"><TD colspan="7"><TABLE width="100%" cellspacing="0" border="0"><TR>
<TD width="30%"></TD>
<TD>
进项税率
 </TD>
<TD align="right">17%
</TD>
</TR></TABLE></TD></TR>
<INPUT TYPE="HIDDEN" NAME="sectioncnt" VALUE="">
</TABLE></TD>
</TR>
<TR>
<TD></TD>
<TD colSpan="5" align="left">

商品说明:
 子弟薯片玉米味. CDR ZD CHIPS BAG </TD>
</TR>
<TR class="unl">
<TD></TD>
<TD colSpan="3" bordercolor="white"><TABLE width="100%" cellspacing="0" border="1" bordercolor="blue">
<TR align="center" valign="bottom" bordercolor="white">
<TD class="black">Pack by Store</TD>
<TD class="noshade" colspan="2"></TD>
</TR>
<TABLE width="100%" border="1" cellspacing="0">
<TR class="shade" align="center" valign="bottom" bordercolor="blue">
<TD>行号</TD>
<TD>商品号</TD>
<TD colspan="2">条码</TD>
<TD>供应商货号</TD>
<TD>颜色</TD>
<TD>尺码</TD>
<TD>合计件数</TD>
<TD>单位</TD>
<TD>成本</TD>
<TD>外包/内盒装</TD>
<TD>成本合计</TD>
</TR>
<INPUT TYPE="HIDDEN" NAME="linecnt" VALUE="15"><TR class="yellow" align="center" valign="bottom" bordercolor="blue">
<TD>001 </TD>
<INPUT TYPE="HIDDEN" NAME="line1" VALUE="001"><TD>010058857 </TD>
<INPUT TYPE="HIDDEN" NAME="bitem1" VALUE="010058857"><TD>6922222098587 </TD>
<INPUT TYPE="HIDDEN" NAME="PO1081" VALUE="EN"><TD>EAN</TD>
<INPUT TYPE="HIDDEN" NAME="upc1" VALUE="6922222098587"><TD>09858 </TD>
<INPUT TYPE="HIDDEN" NAME="stock1" VALUE="09858"><TD> </TD>
<INPUT TYPE="HIDDEN" NAME="color1" VALUE=""><TD>22g </TD>
<INPUT TYPE="HIDDEN" NAME="size1" VALUE="22g"><TD align="right">80 </TD>
<INPUT TYPE="HIDDEN" NAME="qty1" VALUE="80.00"><INPUT TYPE="HIDDEN" NAME="ordqty1" VALUE="80"><TD>EA </TD>
<INPUT TYPE="HIDDEN" NAME="uom1" VALUE="EA"><TD align="right">.7693</TD>
<INPUT TYPE="HIDDEN" NAME="cost1" VALUE=".769"><TD>80/80<INPUT TYPE="HIDDEN" NAME="sellingUnits1" VALUE="1">
</TD>
<TD align="right">61.54<INPUT TYPE="HIDDEN" NAME="ecost1" VALUE="61.52">
</TD>
</TR>
<TR>
<TD></TD>
<TD colSpan="10"><TABLE width="100%" cellspacing="0" border="1" bordercolor="blue">
<TR class="sac"><TD colspan="7"><TABLE width="100%" cellspacing="0" border="0"><TR>
<TD width="30%"></TD>
<TD>
进项税率
 </TD>
<TD align="right">17%
</TD>
</TR></TABLE></TD></TR>
<INPUT TYPE="HIDDEN" NAME="sectioncnt" VALUE="">
</TABLE></TD>
</TR>
<TR>
<TD></TD>
<TD colSpan="5" align="left">

商品说明:
 子弟薯片玉米味. CDR ZD CHIPS BAG </TD>
</TR>
<TR class="unl">
<TD></TD>
<TD colSpan="3" bordercolor="white"><TABLE width="100%" cellspacing="0" border="1" bordercolor="blue">
<TR align="center" valign="bottom" bordercolor="white">
<TD class="black">Pack by Store</TD>
<TD class="noshade" colspan="2"></TD>
</TR>
<TR class="black" align="center" valign="bottom" bordercolor="blue">
<TD class="black" width="40%">Store</TD>
<TD class="black" width="30%">QTY</TD>
<TD class="black">单位</TD>
</TR>
<TR class="shade" align="center" valign="bottom" border="1" bordercolor="blue">
<TD>207</TD>
<TD>80</TD>
<TD>EA</TD>
</TR>
</TABLE></TD>
</TR>
<TR class="yellow" align="center" valign="bottom" bordercolor="blue">
<TD>002 </TD>
<INPUT TYPE="HIDDEN" NAME="line2" VALUE="002"><TD>010058864 </TD>
<INPUT TYPE="HIDDEN" NAME="bitem2" VALUE="010058864"><TD>6922222098181 </TD>
<INPUT TYPE="HIDDEN" NAME="PO1082" VALUE="EN"><TD>EAN</TD>
<INPUT TYPE="HIDDEN" NAME="upc2" VALUE="6922222098181"><TD>09818 </TD>
<INPUT TYPE="HIDDEN" NAME="stock2" VALUE="09818"><TD> </TD>
<INPUT TYPE="HIDDEN" NAME="color2" VALUE=""><TD>22g </TD>
<INPUT TYPE="HIDDEN" NAME="size2" VALUE="22g"><TD align="right">80 </TD>
<INPUT TYPE="HIDDEN" NAME="qty2" VALUE="80.00"><INPUT TYPE="HIDDEN" NAME="ordqty2" VALUE="80"><TD>EA </TD>
<INPUT TYPE="HIDDEN" NAME="uom2" VALUE="EA"><TD align="right">.7693</TD>
<INPUT TYPE="HIDDEN" NAME="cost2" VALUE=".769"><TD>80/80<INPUT TYPE="HIDDEN" NAME="sellingUnits2" VALUE="1">
</TD>
<TD align="right">61.54<INPUT TYPE="HIDDEN" NAME="ecost2" VALUE="61.52">
</TD>
</TR>
<TR>
<TD></TD>
<TD colSpan="10"><TABLE width="100%" cellspacing="0" border="1" bordercolor="blue">
<TR class="sac"><TD colspan="7"><TABLE width="100%" cellspacing="0" border="0"><TR>
<TD width="30%"></TD>
<TD>
进项税率
 </TD>
<TD align="right">17%
</TD>
</TR></TABLE></TD></TR>
<INPUT TYPE="HIDDEN" NAME="sectioncnt" VALUE="">
</TABLE></TD>
</TR>
<TR>
<TD></TD>
<TD colSpan="5" align="left">

商品说明:
 子弟薯片海苔味味. CDR ZD CHIPS BAG </TD>
</TR>
<TR class="unl">
<TD></TD>
<TD colSpan="3" bordercolor="white"><TABLE width="100%" cellspacing="0" border="1" bordercolor="blue">
<TR align="center" valign="bottom" bordercolor="white">
<TD class="black">Pack by Store</TD>
<TD class="noshade" colspan="2"></TD>
</TR>
<TR class="black" align="center" valign="bottom" bordercolor="blue">
<TD class="black" width="40%">Store</TD>
<TD class="black" width="30%">QTY</TD>
<TD class="black">单位</TD>
</TR>
<TR class="shade" align="center" valign="bottom" border="1" bordercolor="blue">
<TD>215</TD>
<TD>80</TD>
<TD>EA</TD>
</TR>
</TABLE></TD>
...全文
768 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
csproj 2010-06-12
  • 打赏
  • 举报
回复
这个帖子结了。
\r\n 和 \n
如果谁知道原因,发这个帖子把。讨论的分散了不好
http://topic.csdn.net/u/20100611/11/f770a5f9-a12f-4d70-9b5e-569557dd85e0.html
csproj 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wuyazhe 的回复:]
没优化,修改了一点,regexbuddy,.net都可以通用了


C# code
<INPUT TYPE="HIDDEN" NAME="line(?<rowid>\d*)"(?:[\s\S]*?<TD[^>]*>(?<rowdata>[^<]*?)(?:&#12288;)?<[\s\S]*?){11}</TR>[\s\S]+?&#12288;(?<CHname>.+?)&……
[/Quote]
我也是用\r\n替换\n
但是理解不了为什么。难道是工具考虑不周到?
csproj 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wuyazhe 的回复:]
你滥用环视了。很多地方不需要的。
[/Quote]
(?=123)123就属于多次一举。
我已经把
(?=<TD)<TD 改成 <TD了
wuyi8808 2010-06-12
  • 打赏
  • 举报
回复
兔子-顾问 2010-06-12
  • 打赏
  • 举报
回复
没优化,修改了一点,regexbuddy,.net都可以通用了

<INPUT TYPE="HIDDEN" NAME="line(?<rowid>\d*)"(?:[\s\S]*?<TD[^>]*>(?<rowdata>[^<]*?)(?: )?<[\s\S]*?){11}</TR>[\s\S]+? (?<CHname>.+?) (?<ENname>.+?) [\s\S]+?(?:<TR[^<]*>\r?\n(?:<TD>(?<detail>[^<].*)</TD>\r?\n){3}</TR>\r?\n)+</TABLE>
兔子-顾问 2010-06-12
  • 打赏
  • 举报
回复
你滥用环视了。很多地方不需要的。
兔子-顾问 2010-06-12
  • 打赏
  • 举报
回复
这种写法还真怪异哦。顺序环视写最前面?
csproj 2010-06-11
  • 打赏
  • 举报
回复
楼上图片看不到,找不到地方放图片.
2楼说错了 整个文件用RegexTester匹配是18ms 不是18秒
csproj 2010-06-11
  • 打赏
  • 举报
回复
匹配2次的截图
csproj 2010-06-11
  • 打赏
  • 举报
回复
忘了说:
MatchCollection mc = re.Matches("text");

这里的"text" 我通过IO.ReadAllText 或者TextBox1.Text来读的
Xiaoyuan245437 2010-06-11
  • 打赏
  • 举报
回复
最近刚学习正则 至于效率方面没有研究
希望 过客 能过来指导下`

684

社区成员

发帖
与我相关
我的任务
社区描述
智能路由器通常具有独立的操作系统,包括OpenWRT、eCos、VxWorks等,可以由用户自行安装各种应用,实现网络和设备的智能化管理。
linuxpython 技术论坛(原bbs)
社区管理员
  • 智能路由器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧