怎么用正则表达式取出一表中所有数据

xzyl 2008-12-15 01:39:32
我已经从网页中获取到一个table,存成了string str="<table...../table>",请高手指点一下怎么用正则表达式取出每一行每一格的数据.正则表达式我还没用过,请高手详细指点
...全文
236 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2010-07-26
  • 打赏
  • 举报
回复
大家都太强了,搜索了好久,终于找到这个文章了,我郁闷了半天,现在终于搞定了。
谢谢啦。
alvin_baby 2010-04-08
  • 打赏
  • 举报
回复
up!!!!
xzyl 2008-12-16
  • 打赏
  • 举报
回复
谢谢min_jie ,复制过去,改了一小点(Groups) 终于搞定了,
还没能看懂 要好好学学正则了
止戈而立 2008-12-15
  • 打赏
  • 举报
回复
string pattern="<tr [^>]*>\s*<td [^>]*>(?<type>[^<]*)</td>\s*<td [^>]*>(?<open>[^<]*)</td>\s*<td [^>]*>(?<high>[^<]*)</td>\s*<td [^>]*>(?<low>[^<]*)</td>\s*<td [^>]*>(?<close>[^<]*)</td>\s*<td [^>]*>(?<nowprice>[^<]*)</td>\s*<td [^>]*>(?<balance>[^<]*)</td>\s*<td [^>]*>(?<trade>[^<]*)</td>\s*<td [^>]*>(?<count>[^<]*)</td>\s*<td [^>]*><font [^>]*>(?<addcount>[^<]*)</font></td>\s*</tr>";
Regex reg=new Regex(pattern);
foreach(Match m in reg.Matches(str))
{
Console.WriteLine(m.Group["type"].Value);
Console.WriteLine(m.Group["open"].Value);
Console.WriteLine(m.Group["high"].Value);
Console.WriteLine(m.Group["low"].Value);
Console.WriteLine(m.Group["close"].Value);
Console.WriteLine(m.Group["nowprice"].Value);
Console.WriteLine(m.Group["balance"].Value);
Console.WriteLine(m.Group["trade"].Value);
Console.WriteLine(m.Group["count"].Value);
Console.WriteLine(m.Group["addcount"].Value);
}
xzyl 2008-12-15
  • 打赏
  • 举报
回复
谢谢,不是不愿意,是想着代码太长了,没能把意思表大清楚,
网址是http://www.smm.com.cn/lme.php,table我已经存在string str里面了,想把里面几种金属对应的数据存在数据库里
再次谢谢min_jie
止戈而立 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 xzyl 的回复:]
对的,表结构大致如下,参考上面贴出的部分
a b c d e f g
01 4 5 6 7 8 9
02 4 4 ......
我的意思可能没表达清楚,其实是想取出01对应4 5 6 7 8 9 的值 02对应的4 4 等每一个td的值
上面的代码只是把表头abcdefg 取出来
行列是固定的
[/Quote]

没有办法,楼主就是不愿意把整个网页代码发出来,或者把网页地址发出来。。这个正则就没办法写。。。
xzyl 2008-12-15
  • 打赏
  • 举报
回复
能不能请高手指点一下,通用的操作,比如我要取01对应的b c ... 02 对应的b c....
我对正则表达式基本上不懂,谢谢 min_jie 的耐心
xzyl 2008-12-15
  • 打赏
  • 举报
回复
对的,表结构大致如下,参考上面贴出的部分
a b c d e f g
01 4 5 6 7 8 9
02 4 4 ......
我的意思可能没表达清楚,其实是想取出01对应4 5 6 7 8 9 的值 02对应的4 4 等每一个td的值
上面的代码只是把表头abcdefg 取出来
行列是固定的
止戈而立 2008-12-15
  • 打赏
  • 举报
回复
我测试的结果是:
a
b
c
d
e
f
g
h
i
有问题吗?
如果是还有其他的列,那正则表达式肯定要把其他列也给加上。。
xzyl 2008-12-15
  • 打赏
  • 举报
回复
谢谢,现在没报错了,但始终是只会显示出第一行来,也就是只显示表头来,后面的数据00001,00002等都没出来
Regex reg = new Regex("(? <= <div [^>]*>)((?!品种代码)[^ <])+(?= </div>)", RegexOptions.IgnoreCase);
foreach(Match m in reg.Match(str))
{
Console.WriteLine(m.Value);
}
表头每一列实际是长的中文,我把他简化成了a,b,c...不知道有没有影响到各位专家的判断
止戈而立 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 xzyl 的回复:]
谢谢,奇怪了,刚才还好好的,现在运行到Regex reg = new Regex...又冒出来无法识别的分组构造
[/Quote]

CSDN的<号总是会自动在前面加一个空格,注意去掉那个空格。。
xzyl 2008-12-15
  • 打赏
  • 举报
回复
谢谢,奇怪了,刚才还好好的,现在运行到Regex reg = new Regex...又冒出来无法识别的分组构造
止戈而立 2008-12-15
  • 打赏
  • 举报
回复
郁闷啊。。手打的代码。。没怎么注意:
reg.Matches(str)
这回对了。。
heiyelidexingxing 2008-12-15
  • 打赏
  • 举报
回复
學習中
xzyl 2008-12-15
  • 打赏
  • 举报
回复
呵呵,reg.Matchs(str) 错误 2 “System.Text.RegularExpressions.Regex”并不包含“Matchs”的定义
刚开始学习C#...
止戈而立 2008-12-15
  • 打赏
  • 举报
回复
少写了个s,不好意思reg.Matchs(str)
xzyl 2008-12-15
  • 打赏
  • 举报
回复
谢谢,直接复制Regex reg = new Regex("(? <= <div [^>]*>)((?!品种代码)[^ <])+(?= </div>)", RegexOptions.IgnoreCase);
foreach(Match m in reg.Match(str))
{
Console.WriteLine(m.Value);
}
运行错误 2
“System.Text.RegularExpressions.Match”不包含“GetEnumerator”的公共定义,因此 foreach 语句不能作用于“System.Text.RegularExpressions.Match”类型的变量 F:\dotnet\ocs\test\test\test\Form1.cs 190 17 test
止戈而立 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xzyl 的回复:]
我想取出整表的数据,有很多行,请告手继续指点
[/Quote]

你还是要把具体的网页代码发出来啊。。要不谁能知道都有哪些列,都有那些规则呢?
如果是很多列,建议用捕获组来实现。

<div [^>]*>(?<type>[^<]+)</div>[\s\S]*?<div [^>]*>(?<name>[^<]+)</div>

类似这样的。。
止戈而立 2008-12-15
  • 打赏
  • 举报
回复
Regex reg = new Regex("(? <= <div [^>]*>)((?!品种代码)[^ <])+(?= </div>)", RegexOptions.IgnoreCase);
Match mat = reg.Match(str);
while (mat.Success)
{
Console.WriteLine(mat.Value.ToString());
mat = reg.Match(str, mat.Index + mat.Length); //这句是要干什么?
}

可以这样写:
Regex reg = new Regex("(? <= <div [^>]*>)((?!品种代码)[^ <])+(?= </div>)", RegexOptions.IgnoreCase); 
foreach(Match m in reg.Matchs(str))
{
Console.WriteLine(m.Value);
}

xzyl 2008-12-15
  • 打赏
  • 举报
回复
我想取出整表的数据,有很多行,请告手继续指点
加载更多回复(7)
内容概要:本文系统介绍了交直流混合配电网潮流计算的统一求解法,并提供了基于Matlab的完整代码实现方案。该方法通过构建统一的数学模型,对交流与直流子系统进行一体化建模与求解,充分考虑了两者之间的耦合特性,实现了对系统电压、电流、功率等关键参数的精确计算。文中详细阐述了算法的理论基础、建模步骤、迭代求解流程及收敛判据,并通过标准测试系统或典型算例进行了仿真验证,结果表明该方法具有较高的计算精度、良好的收敛性和较强的工程适用性,尤其适用于包含分布式电源、电力电子变换器等新型元件的现代复杂配电网分析。; 适合人群:具备电力系统分析基础知识和Matlab编程能力的高等院校研究生、从事电力系统规划、运行与控制的科研人员及工程技术人员。; 使用场景及目标:①用于交直流混合配电网的稳态运行特性分析与仿真研究;②支撑含高比例新能源接入、直流配电、柔性互联装置的配电网规划、优化调度与控制策略开发;③为相关领域的学术研究、毕业设计及工程项目提供可靠、高效的潮流计算工具与技术参考。; 阅读建议:建议读者结合Matlab代码与文本说明进行同步学习,重点理解统一求解模型的构建逻辑、变量处理方式及算法实现细节,可尝试修改系统参数、网络拓扑或扩展应用场景以验证方法的适应性与鲁棒性,并推荐将其拓展应用于多端直流系统、主动配电网或综合能源系统等更复杂的场景中进行深入研究。
内容概要:本文研究了基于改进遗传算法的电力系统无功优化问题,以IEEE30节点标准系统为仿真平台,采用Matlab进行算法编程与仿真验证。研究构建了包含网损最小化和电压质量提升的多目标无功优化数学模型,设计合理的适应度函数并处理各类等式与不等式约束条件,针对传统遗传算法易陷入局部最优、收敛速度慢等问题,引入了改进策略以增强种群多样性、加快寻优效率。通过仿真实验对比分析,验证了改进算法在降低系统有功网损、改善节点电压水平、提高系统运行稳定性与经济性方面的优越性能,为电力系统无功优化提供了有效的智能计算解决方案。; 适合人群:具备电力系统分析基础和Matlab编程能力,从事电力系统运行与控制、智能优化算法研究的研究生、科研人员及电力工程技术人员。; 使用场景及目标:①应用于实际电力系统的无功补偿配置与电压调控,提升电网运行效率与供电品质;②为智能优化算法在复杂电力工程问题中的应用提供典型范例;③作为高校电力专业高年级本科生或研究生开展无功优化课题研究与仿真实践的教学参考资料。; 阅读建议:读者应结合Matlab代码与IEEE30节点系统原始数据进行动手复现,重点剖析算法改进机制对优化性能的影响,深入理解无功优化模型的物理意义与工程约束的数学表达,从而掌握智能算法解决电力系统实际问题的完整技术路线。

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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