文字片段:
<head><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /><title> 知识管理平台 </title>
需要获取title标签内的文字,即:知识管理平台,我写的正则表达式如下:
string pattern = @"<title>([\t\n]*)(.*)(\1)</title>"; Regex reg = new Regex(pattern,RegexOptions.Multiline); string result = reg.Match(pageHtml).Groups[1].Value;
在WINFORM程序中运行,怎么也获取不到,但我用网页测试工具是可以获取的,很是不解,JS与C#正则表达式难道不同???求助高手解答,谢谢!
(?<=<title>)([\t\n]*)(.*)(\1)(?=</title>)
如果按你的,就要取
string result = reg.Match(pageHtml).Groups[2].Value;
谢谢你的热心回答,我用了你的正则表达式,试过也不行,但我稍作修改就可以了:
string pattern = @"(?<=<title>)([\t\r\n]*)(.*)(\1)(?=</title>)"; Regex reg = new Regex(pattern); string result = reg.Match(userInfoResult).Groups[2].Value;
原因是少个\r,可能是JS与C#对正则表达式的解析有所不同造成的,当然这解析成功后,在字符串前面还多了一个\t,这又是咋回事,该如何解决,还请指教,谢谢!
@梦在旅途:
可以使用
RegexOptions.Singleline
代替
RegexOptions.Multiline
@梦在旅途: 对于 \t 我这解析出来是没有的
@Yu: 你要看我的截图里面的内容,标题文字前面是有换行加TAB键的
@梦在旅途: 都匹配进Groups[1] 了
@Yu: 但Groups[2]中还包含有\t,不知道什么问题,如下图示:
@梦在旅途: 这是由于后面(\1)没有\t,所以前面就最小匹配\r\n
@梦在旅途:
这样就不会
(?<=<title>)([\r\n\t]*)(.*?)([\r\n\t]*)(?=</title>)
@Yu: 经你提点,确实无问题了,非常感谢!可能对分组不太熟!