正则表达式和XML
1. 正则表达式
是一个用来进行匹配的包含元字符的字符串
C#中用System.string和System.Text.StringBuilder的各种方法执行的任务,
如果使用正则表达式,这些代码一般可以压缩为几行
匹配汉字 汉字使用unicode编码的
常见的元字符
a) ^123456$ 限定开头结尾 于是只能匹配123456
b) \d 代表一个数字 d--digit
c) + 紧挨着+的至少出现一次
d) [] 匹配其中任意一个
e) [^] <[^>]+> -->刚好<> 可以用来找到所有的html标签
f) \w [a-z0-9A-Z]等价于字符类
g) \s space 匹配一个空白符(回车 换行)
h) \S 匹配任意一个非空白符 [\s\S] --> 任意字符
i) ? 紧挨着?匹配0次或1次 https?// s-->security(加密过)
j) * 紧挨着*出现0次或多次
匹配任意的整数 ^(-?[0-9]\d*|0)$ |--或--优先级最低
匹配任意的数字 ^(-?[0-9]\d*|0)(\.\d+)?$
k) {n} 前面紧跟的字符出现n次
l) {n,m}
m) . 表示任意的非换行字符 <--> /s/S包括了换行
n) () 分组
2. 常见元字符总结
基本元字符: . [] | ()
限定元字符: + * ? {n} {n,} {n,m}
首位元字符: ^ $
简写元字符: \d \D \w \W \s \S
3. C Sharp中使用正则表达式 -- 匹配
Regex类 -- Regular Expression
public static bool IsMatch(string input,string pattern)
使用正则表达式进行匹配
public static Match Match(string input,string pattern)
public static MatchCollection Matches(string input,string pattern)
Match类 表示单个正则表达式匹配的结果
属性:success index length value groups
4. 正则表达式分组--在一个匹配中再拆分提取需要的
在正则表达式中如果有圆括号,表示有一个分组
组的编号:整个匹配结果为0号,从左往右数,见到"("就编号,编号从1开始
5. WebClient
提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法
DownloadString()方法
DownloadFile()
6. try -- catch 在catch中写异常log
try
{
webClient.DownloadFile(url,@"imgs\"+name);
}
catch(Exception ex)
{
File.AppendAllText("log.txt",string.Format("{0}\r\n{1}\r\n\t{2}\r\n\r\n",
DateTime.Now, ex.Message, ex.stackTrace));
}
7. 贪婪模式
默认正则表达式的匹配是有权级之分的
两个或多个任意多个匹配中,如果互相冲突,左边的优先,右边的任意多个都是最低级
如果左边的去掉了优先级,右边的还是从左开始考虑优先级
取消优先级的方法就是加?
在写正则表达式的时候一开始不考虑贪婪模式,当取到的结果比预期的多的时候,再考虑
在使用正则表达式的时候,我宁可分步骤来解决,也不一步到位
8. C Sharp中使用正则表达式 -- 替换
public static string Replace(string input,string pattern,string replacement)
问题:把2014年5月6日 --> 2014-5-6
Regex.Replace(str,@"年-月", "-").Replace("日","");
第二个Replace()是字符串的方法
--> 5/6/2014 --> 替换字符串中可以引用前面匹配到的数据 第几组用$表示
Regex.Replace(str,@"(\d+)年(\d+)月(\d+)日", "$2/$3/$1")
9. XML
语法规范
<标签名 属性="值">数据</标签名>
<标签名 属性="值" />
结构
1)xml文档头
2)有且只有一个根节点
3)XML中所有的标签:数据标签、注释标签(所有的标签都可以称为节点,但是数据称为元素)
4)在XML中注释的结构有两种:<!--注释内容--> <![CDATA[用于存储数据的注释]]>
vs2010--工具--代码段管理器--Visual C#--
C:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\2052\Visual C#
看for的代码段
<Code Language="csharp"><![CDATA[for (int $index$ = 0; $index$ < $max$; $index$++)
{
$selected$ $end$
}]]>
</Code>
手写XML文件
1)添加文档头<?xml version="1.0" encoding="gb2312"?>
2)添加根节点
3)添加数据节点
10. 使用CSharp操作XML
1)传统的XML处理
XmlDocument XmlElement XmlAttribute
//写XML
XmlDocument xdoc = new XmlDocument();
XmlDeclaration xdec = doc.CreateXmlDeclaration("1.0","gb2312",null);
xdoc.AppendChild(xdec);
XmlElement xele = xdoc.CreateElement("root");
xdoc.AppendChild(xele);
XmlElement xele01 = xdoc.CreateElement("标签");
xele.AppendChild(xele01);
//写入文本数据
XmlText txt = xdoc.CreateTextNode("我是一个文本节点");
xlel01.AppendChild(txt);
//属性=值
XmlAttribute xattr = xdoc.CreateElement("我是一个属性");
xattr.value = "属性值";
xele01.SetAttributeNode(xattr);
xdoc.Save("myfirstxmlfile.xml");
//读XML --> 比较复杂?
XmlDocument x = new XmlDocument();
x.Load("myfirstxmlfile.xml");
x.GetElementById...
xmlElement.GetAttribute("name");
2)Linq to XML
XDocument XElement XAttribute
查询静态的XML文档
var query = from people in xdoc.Descendants(“PERSONA”) select people.value;
foreach(var item in query){}
查询动态的XML文档
目前,Internet上有许多动态的XML文档。给指定的URL端点发送一个请求,就会找到博客种子等许多提供XML文档的内容。
这些种子可以在浏览器上查看,或者通过RSS聚合器查看,或用作纯粹的XML
XDocument xdoc = XDocument.Load(@"http://constfafa.blog.csdn.cn/Rss.aspx");
1. 正则表达式
是一个用来进行匹配的包含元字符的字符串
C#中用System.string和System.Text.StringBuilder的各种方法执行的任务,
如果使用正则表达式,这些代码一般可以压缩为几行
匹配汉字 汉字使用unicode编码的
常见的元字符
a) ^123456$ 限定开头结尾 于是只能匹配123456
b) \d 代表一个数字 d--digit
c) + 紧挨着+的至少出现一次
d) [] 匹配其中任意一个
e) [^] <[^>]+> -->刚好<> 可以用来找到所有的html标签
f) \w [a-z0-9A-Z]等价于字符类
g) \s space 匹配一个空白符(回车 换行)
h) \S 匹配任意一个非空白符 [\s\S] --> 任意字符
i) ? 紧挨着?匹配0次或1次 https?// s-->security(加密过)
j) * 紧挨着*出现0次或多次
匹配任意的整数 ^(-?[0-9]\d*|0)$ |--或--优先级最低
匹配任意的数字 ^(-?[0-9]\d*|0)(\.\d+)?$
k) {n} 前面紧跟的字符出现n次
l) {n,m}
m) . 表示任意的非换行字符 <--> /s/S包括了换行
n) () 分组
2. 常见元字符总结
基本元字符: . [] | ()
限定元字符: + * ? {n} {n,} {n,m}
首位元字符: ^ $
简写元字符: \d \D \w \W \s \S
3. C Sharp中使用正则表达式 -- 匹配
Regex类 -- Regular Expression
public static bool IsMatch(string input,string pattern)
使用正则表达式进行匹配
public static Match Match(string input,string pattern)
public static MatchCollection Matches(string input,string pattern)
Match类 表示单个正则表达式匹配的结果
属性:success index length value groups
4. 正则表达式分组--在一个匹配中再拆分提取需要的
在正则表达式中如果有圆括号,表示有一个分组
组的编号:整个匹配结果为0号,从左往右数,见到"("就编号,编号从1开始
5. WebClient
提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法
DownloadString()方法
DownloadFile()
6. try -- catch 在catch中写异常log
try
{
webClient.DownloadFile(url,@"imgs\"+name);
}
catch(Exception ex)
{
File.AppendAllText("log.txt",string.Format("{0}\r\n{1}\r\n\t{2}\r\n\r\n",
DateTime.Now, ex.Message, ex.stackTrace));
}
7. 贪婪模式
默认正则表达式的匹配是有权级之分的
两个或多个任意多个匹配中,如果互相冲突,左边的优先,右边的任意多个都是最低级
如果左边的去掉了优先级,右边的还是从左开始考虑优先级
取消优先级的方法就是加?
在写正则表达式的时候一开始不考虑贪婪模式,当取到的结果比预期的多的时候,再考虑
在使用正则表达式的时候,我宁可分步骤来解决,也不一步到位
8. C Sharp中使用正则表达式 -- 替换
public static string Replace(string input,string pattern,string replacement)
问题:把2014年5月6日 --> 2014-5-6
Regex.Replace(str,@"年-月", "-").Replace("日","");
第二个Replace()是字符串的方法
--> 5/6/2014 --> 替换字符串中可以引用前面匹配到的数据 第几组用$表示
Regex.Replace(str,@"(\d+)年(\d+)月(\d+)日", "$2/$3/$1")
9. XML
语法规范
<标签名 属性="值">数据</标签名>
<标签名 属性="值" />
结构
1)xml文档头
2)有且只有一个根节点
3)XML中所有的标签:数据标签、注释标签(所有的标签都可以称为节点,但是数据称为元素)
4)在XML中注释的结构有两种:<!--注释内容--> <![CDATA[用于存储数据的注释]]>
vs2010--工具--代码段管理器--Visual C#--
C:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\2052\Visual C#
看for的代码段
<Code Language="csharp"><![CDATA[for (int $index$ = 0; $index$ < $max$; $index$++)
{
$selected$ $end$
}]]>
</Code>
手写XML文件
1)添加文档头<?xml version="1.0" encoding="gb2312"?>
2)添加根节点
3)添加数据节点
10. 使用CSharp操作XML
1)传统的XML处理
XmlDocument XmlElement XmlAttribute
//写XML
XmlDocument xdoc = new XmlDocument();
XmlDeclaration xdec = doc.CreateXmlDeclaration("1.0","gb2312",null);
xdoc.AppendChild(xdec);
XmlElement xele = xdoc.CreateElement("root");
xdoc.AppendChild(xele);
XmlElement xele01 = xdoc.CreateElement("标签");
xele.AppendChild(xele01);
//写入文本数据
XmlText txt = xdoc.CreateTextNode("我是一个文本节点");
xlel01.AppendChild(txt);
//属性=值
XmlAttribute xattr = xdoc.CreateElement("我是一个属性");
xattr.value = "属性值";
xele01.SetAttributeNode(xattr);
xdoc.Save("myfirstxmlfile.xml");
//读XML --> 比较复杂?
XmlDocument x = new XmlDocument();
x.Load("myfirstxmlfile.xml");
x.GetElementById...
xmlElement.GetAttribute("name");
2)Linq to XML
XDocument XElement XAttribute
查询静态的XML文档
var query = from people in xdoc.Descendants(“PERSONA”) select people.value;
foreach(var item in query){}
查询动态的XML文档
目前,Internet上有许多动态的XML文档。给指定的URL端点发送一个请求,就会找到博客种子等许多提供XML文档的内容。
这些种子可以在浏览器上查看,或者通过RSS聚合器查看,或用作纯粹的XML
XDocument xdoc = XDocument.Load(@"http://constfafa.blog.csdn.cn/Rss.aspx");