【转】字符串和正则表达式

System.String是一个功能很是强大且用途很是普遍的基类,但它不是.NET中惟一与字符串相关的类,特别是System.Text和System.Text.RegularExpressions命名空间中的类。本文主要介绍内容: 一、建立字符串 二、格式化表达式 三、正则表达式
1、System.String类 System.String是一个类,专门用于存储字符串,容许对字符串进行许多操做。 例如:正则表达式

string  messsage1  =   " Hello " //  return "Hello" message1  +=   " , There " //  return "Hello, There" string  message2  =  message1  +   " ! "   // return "Hello, There!"

C#还容许相似于索引符的语法来提取指定的字符:ide

char  char4  =   " message " [ 4 ];  // return 'a'

1.1 建立字符串
string类的功能很是强大,可是它存在一个问题:重复修改给定的字符串,效率很低。它其实是一个不可变的数据类型,一旦对字符串进行了初始化,该字符串就不能改变了。修改该字符串的内容时,其实是建立一个新的字符串,若是有必要,能够把旧的字符串内容复制到新字符串中。 例如:ui

string  greetingText =   " Hello.  " ; greetingText  +=   " This is source code " ;

在执行这段代码时,首先建立一个String对象greetingText,并初始化为文本"Hello. "(最后是一个空格)。此时.NET运行库为该字符串分配足够的内存在保存初始文本(7个字符),再设置变量greetingText,表示这个字符串实例。从表面上看,执行下一句代码,是把新的文本直接添加到初始文本的后面,但实际并不是如此执行的。而是另外建立一个新的字符串实例,给他分配足够的内存,以保存合并起来的文本,而后更新存储再变量greetingText中的地址,使变量指向新的字符串对象。旧的字符串对象被撤销了引用——再也不有变量引用它,下一次垃圾收集器清理应用程序中全部未使用的对象时,就会删除它。
当字符串的长度很大的时候,这样作显然影响了执行效率,因此C#中用System.Text.StringBuilder类来处理较长的字符串。StringBuilder类功能没有String类强大,功能仅限于替换和添加或删除字符串中的文本,可是工做方式很是高效。 用StringBuilder类建立字符串:spa

StringBuilder greetingBuilder  =   new  StringBuilder( " Hello from all the guys at Wrox Press.  " 150 ); // 显示给定初始文本内容和分配内存长度 StringBuilder message  =   new  StringBuilder( " Hello " ); // 仅仅给出字符串,系统自动分配内存 StringBuilder message2  =   new  StringBuilder( 20 ); // 给指定容量建立一个空的StringBuiler 

StringBuiler类有两个主要属性: Length指定字符串的实际长度 Capacity是字符串占据存储单元的长度 StringBuilder类的主要方法: Append()方法,在字符串尾部添加新的文本 Replace()方法,替换文本
注意:不能把StringBuilder转换为String,若是要把StringBuilder的内容输出为String,惟一的方式是使用ToString()方法。
1.2 格式化字符串code

double  d  =   13.45 ; int  i  =   45 ; sting result  =  String.Format( " The double is {0,10:E} and the int contains {1} " ,d,i);

{}中的0、1等分别对应后面的d和i,10:E是格式,表示占10个字符,若是数字是正数,结果向右对齐,若是是负数则左对齐。E表示科学计数法。orm

格式符 应用 含义 示例
C 数字类型 专用场合的货币值 $4834.50(USA)
D 只用于整数类型 通常的整数 4834
E 数字类型 科学计数法 4.834E+003
F 数字类型 小数点后的位数固定 4834.50
G 数字类型 通常的数字 4834.5

N对象

数字类型 一般是专用场合的数字格式 4,834.50
P 数字类型 百分比计数法 432,000.00%
X 只用于整数类型 16进制格式 1120(若是须要显示0x1120,须要写上0x)

2、正则表达式
2.1 正则表达式概述
正则表达式语言是一种专门用于字符串处理的语言,使用正则表达式能够对字符串执行许多复杂而高级的操做,例如:区分URI的各个元素(例如:http://www.sina.com.cn,提取协议、计算机名、文件名等)。 在C#中只须要用System.Text.RegularExpressions类的RegEx()方法或者调用静态方法RegEx(),给它们传递要处理的字符串和一个正则表达式,就能够完成咱们所须要的操做,获得预期的结果了。 下面列出正则表达式经常使用字符表索引

符号 含义 示例 匹配示例
^ 输入文本的开头 ^B B,但只能是文本中的第一个字符
$ 输入文本的结尾 X$ X,但只能是文本的最后一个字符
. 除了换行符(\n)之外的全部单个字符 i.ation isation、ization
* 能够重复0次或者屡次的前导字符 ra*t rt、rat、raat、raaat等
+ 能够重复1次或者屡次的前导字符 ra+t rat、raat和raaat等(不包含rt)
? 能够重复0次或者1次的前导字符 ra?t rt或者rat
\s 任何空白字符 \sa [space]a、\ta、\na等
\S 任何不是空白的字符 \SF

aF、rF、cF等,但不能是\tF内存

\b 字边界 ion\b 以ion结尾的任何字
\B 是否是字边界的位置 \BX\B 字中间的任何X

若是搜索一个元字符,能够用.(一个句点)表示全部除了\n之外的字符,而\.表示一个点。 能够把要替换的字符放到括号中:[1|C]表示字符能够是1或者C,若是要搜索map或者man,能够用ma[n|p]。 方括号也能够表示范围:[a-z]表示a到z的全部小写字母。
示例以下:ci

string  Text  =   @" This comprehensive compendium provides a broad and thorough investigation of all aspects of programming with ASP.NET " ; string  pattern  =   @" \ba " ; // 查找全部以a开头的字符 MatchCollection matches  =  Regex.Matches(Text, pattern, RegexOptions.IgnoreCase);
相关文章
相关标签/搜索