字符串与正则表达式
发布时间:2020-12-14 00:58:02 所属栏目:百科 来源:网络整理
导读:字符串与正则表达式 1、字符串 String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显著。 因为一旦创建了该对象,就不能修改该对象的值 在处理字符串时,最好使用
字符串与正则表达式
1、字符串
String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显著。 因为一旦创建了该对象,就不能修改该对象的值 在处理字符串时,最好使用StringBuilder类,其.NET 命名空间是System.Text。该类并非创建新的对象,而是通过Append,Remove,Insert等方法直接对字符串进行操作,通过ToString方法返回操作结果,因此,当你需要大量拼接、删除、修改字符串使用 StringBuilder 可以优化性能 2、正则表达式 正则表达式提供了功能强大、灵活而又高效的方法来处理文本。 正则表达式:用某种模式去匹配指定字符串的一种表示方式。正则表达式由普通字符和元字符组成。 普通字符:常使用的字符如字母、数字、汉字等 元字符:可以匹配某些字符形式的具有特殊含义的字符,其作用类似于DOS命令使用的通配符。 正则表达式基本书写符号 正则表达式限定符 3. 匹配字符集 (1) 匹配字符集是预定义的用于正则表达式中的符号集。 (2) 如果字符串与字符集中的任何一个字符相匹配,它就会找到这个匹配项。
相同优先级的从左到右进行运算,不同优先级的运算先高后低。各种操作符的优先级从高到低如下:
4. 分组构造 5. 正则表达式举例 非负整数:“^d+$ ” 正整数: “ ^[0-9]*[1-9][0-9]*$” 非正整数: “ ^((-d+)|(0+))$” 整数: “ ^-?d+$” 英文字符串: “ ^[A-Za-z]+$” 英文字符数字串: “ ^[A-Za-z0-9]+$” 英数字加下划线串: “^w+$” E-mail地址:“^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$” URL:“^[a-zA-Z]+://(w+(-w+)*)(.(w+(-w+)*))*(?s*)?$” 2 Regex类 Regex 类表示不可变(只读)正则表达式类。它还包含各种静态方法,允许在不显式创建其他类的实例的情况下使用其他正则表达式类。 Regex 类在System.Text.RegularExpressions命名空间下。 这里仅介绍IsMatch方法。 IsMatch方法:正则表达式在输入字符串中是否找到匹配项。 该方法有四种重载的形式: public bool IsMatch(string str); 表示在构造函数中指定的正则表达式在str中是否找到匹配项。 public bool IsMatch(string str,int start); 表示在构造函数中指定的正则表达式在str的指定起始位置开始是否找到匹配项。参数start表示开始搜索的字符位置。 public static bool IsMatch(string str,string pattern); 表示使用pattern参数中指定的正则表达式是否在str中找到匹配项。 public static bool IsMatch(string str,string pattern,RegexOptions options); 表示使用pattern参数中指定的正则表达式和options枚举提供的匹配选项在input中是否找到匹配项。其中options是RegexOption枚举值的按位“或”组合。 例:
Regexr
=
new
Regex(
@"
[0-9a-z]{3,5}
"
);
string []tests = {"abc","123456","(aa22bb33)","ab"} ; foreach ( string test in tests) { if(r.IsMatch(test)) { Console.WriteLine("{0}中有匹配的项",test); } else { Console.WriteLine("{0}中没有匹配的项",test); } } 3 Match类 Match类表示单个正则表达式匹配操作的结果,得到的结果是只读的。该类没有公共构造函数,而是用Regex对象的Match方法返回的结果创建该类的对象。 例如:
Regexr
=
new
Regex(
"
abc
"
);
Matchm = r.Match( " 123abc456 " ); if (m.Success) { Console.WriteLine("找到匹配位置:"+m.Index); Console.WriteLine("找到匹配结果:"+m.Value); } 运行结果: 找到匹配位置:3 找到匹配结果:abc 4 MatchCollection类 MatchCollection类表示成功的非重叠匹配的序列,得到的集合是只读的。该类同样没有公共构造函数,而是用Regex.Matches方法返回的结果创建该类的对象。 例如:
Regexr
=
new
Regex(
"
abc
"
);
MatchCollectionmc = r.Matches( " 123abc4abcd " ); int count = mc.Count; String[]results = new String[count]; int []matchPosition = new int [count]; for ( int i = 0 ;i < count;i ++ ) { results[i]=mc[i].Value; matchPosition[i]=mc[i].Index; Console.WriteLine("第{0}个匹配结果:{1},位置:{2}",i+1,results[i],matchPosition[i]); } 运行结果: 第1个匹配结果:abc,位置:3 第2个匹配结果:abc,位置:7 5.5 Group类 Group类表示单个捕获组的结果。当与正则表达式匹配的子字符串有多组时,可以使用该类得到某一组的结果。例如:
string
text
=
"
Onecarredcarbluecar
"
;
string pat = @" (w+)s+(car) " ; Regexr = new Regex(pat,RegexOptions.IgnoreCase); Matchm = r.Match(text); int matchCount = 0 ; while (m.Success) { Console.WriteLine("Match"+(++matchCount)); for(inti=1;i<=2;i++) { Groupg=m.Groups[i]; Console.WriteLine(string.Format("Group{0}='{1}'",i,g)); CaptureCollectioncc=g.Captures; for(intj=0;j<cc.Count;j++) { Capturec=cc[j]; Console.WriteLine(string.Format( "Capture{0}='{1}',Position={2}",j,c,c.Index)); } } m=m.NextMatch(); } Console.ReadLine(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |