CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

正则表达式中大小写(title)和(TEXYAREA)的区别???

楼主jasonpower(新丁)2006-03-09 14:23:15 在 .NET技术 / C# 提问

我在写一个程序,用来分拣html文件的若干数据。使用正则表达式获得title的内容时,使用"(title)(.*?)(title)"是可以的(当然我会另外把title等去掉)。  
         
  但是在想取得TEXTAREA标签内的字符串时,使用(TEXTAREA)(.*?)(TEXTAREA)却无法匹配成功。我不知道是不是大小写的关系,因为html文件里TEXTAREA就是大写的。我改成小写的也无效。  
  该文件里只有一对TEXTAREA标签。  
   
  求教各位高手!谢谢了!! 问题点数:40、回复次数:14Top

1 楼jasonpower(新丁)回复于 2006-03-09 14:54:47 得分 0

我把html文件里的TEXTAREA标签也改成小写的textarea,还是没有匹配成功!!  
  我把程序写成if(匹配)显示匹配值   else   显示该html文件的全部字符。出来的结果就是显示全部,也就是说读文件是没错的呀!!  
  真奇怪!!Top

2 楼min_jie(止戈)回复于 2006-03-09 15:02:31 得分 0

估计是你的代码写得有问题。。。  
   
  当然正则表达式也可以写得更好一些。。  
  TEXTAREA(.*?)/TEXTAREATop

3 楼jasonpower(新丁)回复于 2006-03-09 15:16:11 得分 0

代码应该没有错,我如果把那段的TEXTAREA改为title,结果栏里是可以出现title标签里的字符串的。。Top

4 楼mobydick(敌伯威|我排著队拿著爱的号码牌)回复于 2006-03-09 15:23:14 得分 0

把你要取的原始文件贴出来。Top

5 楼min_jie(止戈)回复于 2006-03-09 15:35:42 得分 0

可能是你的标签写错了。。  
   
  没见过TEXYAREA的标签。。是TEXT吧?Top

6 楼jasonpower(新丁)回复于 2006-03-09 16:10:33 得分 0

标题里是打错了,程序里没有错,是TEXTAREA。  
  原始文件太大了,我截取了一些。  
  <html>  
  <head>  
  <title>我不够爱你</title>  
                                          <tr>    
                                              <td   width="96"   height="20"   align="center"   valign="top"   bgcolor="649AF7"><font   color="#FFFFFF">歌词</font></td>  
                                              <td   height="20"   colspan="3"   bgcolor="#FFFFFF">    
                                                  <TEXTAREA   cols="60"   rows="16"   wrap=VIRTUAL   style="BORDER-RIGHT:   DBCFC4   1px   solid;   BORDER-TOP:   DBCFC4   1px   solid;   FONT-SIZE:   12px;   BORDER-LEFT:   DBCFC4   1px   solid;   BORDER-BOTTOM:   DBCFC4   1px   solid;   FONT-FAMILY:   '宋体';   BACKGROUND-COLOR:   #ffffff">  
  不能在没有月亮的夜里    
  也不能轻易地闭上眼睛    
  因为你会出现在天空或心里    
  不能在一望无际的地方    
  也不能钻进了拥挤人群    
  因为寂不寂寞   都会提醒我    
  我失去了我不够爱的你</TEXTAREA>  
   
  程序部分:  
  //歌词  
  Regex   regstr3   =   new   Regex("TEXTAREA(.*?)/TEXTAREA",RegexOptions.Compiled);  
  Match   mastr3   =   regstr3.Match(strstream);//strstream是读原始文件获得的字符串  
  if(mastr3.Success)  
  {  
  Txtly.Text   +=   I.ToString()   +   ";"   +   mastr31.Value+   "\r\n";  
   
  }  
  else  
  {  
  Txtly.Text   +=   I.ToString()   +   ";"   +   strstream   +   "\r\n";  
  }  
   
  结果出现的就是全部字符串。Txtly是显示结果的web文本框。  
  郁闷ingTop

7 楼min_jie(止戈)回复于 2006-03-09 16:15:04 得分 0

Regex   regstr3   =   new   Regex("<TEXTAREA.*?>(.*?)</TEXTAREA>",RegexOptions.Single);  
   
  这样改一下。  
   
  你后面写的我就不看了。。Top

8 楼jasonpower(新丁)回复于 2006-03-10 09:07:12 得分 0

min_jie(止戈)   :谢谢,应该是RegexOptions.Singleline   吧?:)  
   
  试过了,还是不行。不过你提醒了我,我发现其他比如title正常,“也许”是因为title标签一对是在一行里的。而textarea标签不是在一行里的。于是我换为:("<TEXTAREA.*?>(.*?)</TEXTAREA>",RegexOptions.Multiline   ),所谓多行模式(我也只是课根据字面理解),不过也还是不行!!!Top

9 楼min_jie(止戈)回复于 2006-03-10 09:13:32 得分 40

Regex   regstr3   =   new   Regex("<TEXTAREA.*?>(.*?)</TEXTAREA>",RegexOptions.Singleline|RegexOptions.IgnoreCase);  
  再这样改改:单行模式(即把整段字符串当作一行),并且忽略大小写。Top

10 楼min_jie(止戈)回复于 2006-03-10 09:16:00 得分 0

if(mastr3.Success)  
  {  
  Txtly.Text   +=   I.ToString()   +   ";"   +   mastr31.Value+   "\r\n";//为什么会出现mastr31?  
   
  }  
  else  
  {  
  Txtly.Text   +=   I.ToString()   +   ";"   +   strstream   +   "\r\n";  
  }Top

11 楼jasonpower(新丁)回复于 2006-03-10 10:07:10 得分 0

谢谢!试过了,还是匹配不成功!  
  程序里Txtly.Text   +=   I.ToString()   +   ";"   +   mastr31.Value+   "\r\n";  
  应该是mastr3.Value才对。因为完整的程序还要再过滤一次,我复制过来时为了简便起见,就舍弃了一部分,这个变量名没有看清楚。抱歉各位。  
   
  我理解的:在正则里“.”可以匹配任何一个字符,应该也包括换行吧?min_jie(止戈)   提示了RegexOptions.Singleline单行模式(即把整段字符串当作一行),应该也不成为问题的呀!可是随便换一个在一行里出现的标签,都是可以成功的!!  
  真是奇怪呀!Top

12 楼jasonpower(新丁)回复于 2006-03-10 10:54:40 得分 0

修正:在正则里“.”可以匹配任何一个字符,“除了换行哦!”  
   
  是不是RegexOptions.Singleline单行模式没有起到我们理解的(把整段字符串当作一行)作用呀????????Top

13 楼jasonpower(新丁)回复于 2006-03-10 11:20:38 得分 0

搞定了,("(<textarea\\s)(.*?)</textarea>",RegexOptions.Singleline|RegexOptions.IgnoreCase)  
  就是在,<textarea后面加个\\s,表示后面一定有个空格,(.*?)用来匹配中间的任意字符。  
   
  虽然运行成功了,但是我还是不明白为什么“<textarea\\s”可以,“<TEXTAREA.*?>”不可以?  
   
  在这里要多谢min_jie(止戈)   ,分数立刻送上!!!!!Top

14 楼min_jie(止戈)回复于 2006-03-10 11:21:39 得分 0

那只能说明你的匹配不成功。。你可以调试看看。。匹配成功了没有?  
   
  Top

相关问题

  • 如何用正则表达式不区分大小写的匹配“<script ...>...</script>”?
  • 如何使用正则表达式 将某一字串转换大小写
  • 高分答谢:如何设置.net中正则表达式不区分大小写。
  • 求一用户名正则表达式:可包含大小写英文字母,数字,_,-
  • 求一正则表达式 title="中文英文数字空格"
  • 求个匹配以<title>开头或结尾的正则表达式
  • 正则表达式
  • 正则表达式
  • 正则表达式?
  • 正则表达式[/.-]

关键词

  • 正则表达式
  • 文件
  • 字符
  • 模式
  • mastr
  • txtly
  • 匹配
  • regexoptions
  • textarea
  • 大小写

得分解答快速导航

  • 帖主:jasonpower
  • min_jie

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo