正则表达式匹配文本中包含换行符等空白字符如何匹配

时间:2022-01-06 18:49:33
有一段文本,如图1
正则表达式匹配文本中包含换行符等空白字符如何匹配
上述文本为不规则形式(即没有进行格式化的状态,比较混乱,看不出格式来,并且存在 换行现象)
同样的文本,如图2
正则表达式匹配文本中包含换行符等空白字符如何匹配
上述文本经过格式化,是完整的一段代码,并且以一行显示,中间 不存在换行(由于长度原因,没有完全显示出来,我列在下方)
<td width="20%" style='width:20.0%;border:solid windowtext 1.0pt;border-top:none;mso-border-top-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;padding:0cm 0cm 0cm 0cm;height:22.5pt'><p class=MsoNormal align=center style='text-align:center;mso-pagination:widow-orphan'><span style='font-size:9.0pt;font-family:宋体;mso-bidi-font-family:宋体;color:#0066CC;mso-font-kerning:0pt'>段见忠</span><span lang=EN-US style='font-size:9.0pt;font-family:宋体;mso-bidi-font-family:宋体;mso-font-kerning:0pt'><o:p></o:p></span></p></td>

请注意,上述html代码在我的vs开发工具中不存在换行现象。
使用同样的正则表达式(也同样没有换行现象)去匹配,如果html上述代码不存在换行现象(如图2)则可以进行匹配到数据,但如果使用了图1的html代码则无法匹配到数据,初步判断由于html存在换行符不匹配我的正则表达式,但不知道如何处理,请各位大神指导下,谢谢

附我的正则(代码中不存在换行):<td width=\"20%\" style='width:20.0%;border:solid windowtext 1.0pt;border-top:none;mso-border-top-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;padding:0cm 0cm 0cm 0cm;height:22.5pt'><p class=MsoNormal align=center style='text-align:center;mso-pagination:widow-orphan'><span style='font-size:9.0pt;font-family:宋体;mso-bidi-font-family:宋体;color:#0066CC;mso-font-kerning:0pt'> (?<testTitle3>.*)</span><span lang=EN-US style='font-size:9.0pt;font-family:宋体;mso-bidi-font-family:宋体;mso-font-kerning:0pt'><o:p></o:p></span></p></td>

标红处为仅有的和html代码不同的部分,用于数据抓取

写的有些乱,但是比较着急,在线等,欢迎前来指导~
目前已知\s处理换行符,但不知道能否应用到我的需求中

4 个解决方案

#1


<td\s+[^>]*>\s*<p\s+[^>]*>\s*<span\s+[^>]*>(?<testTitle3>[\s\S]*?)</span>[\s\S]*?</td>

#2


\s 任何不可见字符
\S 任何可见字

#3


string html = @"<td width=""20%"" style='width:20.0%;border:solid windowtext 1.0pt;border-top:none;mso-border-top-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;padding:0cm 0cm 0cm 0cm;height:22.5pt'><p class=MsoNormal align=center style='text-align:center;mso-pagination:widow-orphan'><span style='font-size:9.0pt;font-family:宋体;mso-bidi-font-family:宋体;color:#0066CC;mso-font-kerning:0pt'>段见忠</span><span lang=EN-US style='font-size:9.0pt;font-family:宋体;mso-bidi-font-family:宋体;mso-font-kerning:0pt'><o:p></o:p></span></p></td>";
string patten = @"<td\s+[^>]*>\s*<p\s+[^>]*>\s*<span\s+[^>]*>(?<testTitle3>[\s\S]*?)</span>[\s\S]*?</td>";
foreach (Match m in Regex.Matches(html, patten))
{
    Console.WriteLine(m.Groups["testTitle3"].Value);
}

#4


引用 3 楼 starfd 的回复:
string html = @"<td width=""20%"" style='width:20.0%;border:solid windowtext 1.0pt;border-top:none;mso-border-top-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;padding:0cm 0cm 0cm 0cm;height:22.5pt'><p class=MsoNormal align=center style='text-align:center;mso-pagination:widow-orphan'><span style='font-size:9.0pt;font-family:宋体;mso-bidi-font-family:宋体;color:#0066CC;mso-font-kerning:0pt'>段见忠</span><span lang=EN-US style='font-size:9.0pt;font-family:宋体;mso-bidi-font-family:宋体;mso-font-kerning:0pt'><o:p></o:p></span></p></td>";
string patten = @"<td\s+[^>]*>\s*<p\s+[^>]*>\s*<span\s+[^>]*>(?<testTitle3>[\s\S]*?)</span>[\s\S]*?</td>";
foreach (Match m in Regex.Matches(html, patten))
{
    Console.WriteLine(m.Groups["testTitle3"].Value);
}


非常感谢,可用。

#1


<td\s+[^>]*>\s*<p\s+[^>]*>\s*<span\s+[^>]*>(?<testTitle3>[\s\S]*?)</span>[\s\S]*?</td>

#2


\s 任何不可见字符
\S 任何可见字

#3


string html = @"<td width=""20%"" style='width:20.0%;border:solid windowtext 1.0pt;border-top:none;mso-border-top-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;padding:0cm 0cm 0cm 0cm;height:22.5pt'><p class=MsoNormal align=center style='text-align:center;mso-pagination:widow-orphan'><span style='font-size:9.0pt;font-family:宋体;mso-bidi-font-family:宋体;color:#0066CC;mso-font-kerning:0pt'>段见忠</span><span lang=EN-US style='font-size:9.0pt;font-family:宋体;mso-bidi-font-family:宋体;mso-font-kerning:0pt'><o:p></o:p></span></p></td>";
string patten = @"<td\s+[^>]*>\s*<p\s+[^>]*>\s*<span\s+[^>]*>(?<testTitle3>[\s\S]*?)</span>[\s\S]*?</td>";
foreach (Match m in Regex.Matches(html, patten))
{
    Console.WriteLine(m.Groups["testTitle3"].Value);
}

#4


引用 3 楼 starfd 的回复:
string html = @"<td width=""20%"" style='width:20.0%;border:solid windowtext 1.0pt;border-top:none;mso-border-top-alt:solid windowtext .75pt;mso-border-alt:solid windowtext .75pt;padding:0cm 0cm 0cm 0cm;height:22.5pt'><p class=MsoNormal align=center style='text-align:center;mso-pagination:widow-orphan'><span style='font-size:9.0pt;font-family:宋体;mso-bidi-font-family:宋体;color:#0066CC;mso-font-kerning:0pt'>段见忠</span><span lang=EN-US style='font-size:9.0pt;font-family:宋体;mso-bidi-font-family:宋体;mso-font-kerning:0pt'><o:p></o:p></span></p></td>";
string patten = @"<td\s+[^>]*>\s*<p\s+[^>]*>\s*<span\s+[^>]*>(?<testTitle3>[\s\S]*?)</span>[\s\S]*?</td>";
foreach (Match m in Regex.Matches(html, patten))
{
    Console.WriteLine(m.Groups["testTitle3"].Value);
}


非常感谢,可用。