[正则表达式]基础知识总结

  一直只是知道正则表达式的用途,但具体没使用过,今天稍微了解了下它的基础用法。这里总结一下。

  

  命令空间:System.Text.RegularExpressions

  用途:

    1.   对字符串进行查找和替换;
    2.   识别重复的单词;
    3.   转换格式;
    4.   区分一个字符串的各个子元素,并进行提取。

  RegEx类:

   是对正则表达式引擎的类抽象,通过调用该抽象类的不同方法,实现对正则表达式的处理。

   该类的主要方法如下所示,具体用途相信通过方法名即可知道:

  

  了解完Regex类的主要方法后,还需要关注三个比较重要的类和它们的层次,分别是:Match类、Group类和Capture类。

  假设有如下字符串,input(原始字符串),pattern(正则表达式).

  Match类:模式匹配返回的一个结果,比如调用Regex.Match()方法,会根据输入的正则表达式(pattern),在字符串(input)中进行匹配,每个匹配的结果返回一个Match类实例。

  Group类:表示正则表达式(pattern)中的子表达式的匹配结果,用括号括起来,如[email protected]"(\d{1,2})[.,]?(\d{1,3})"。就有两个组:(\d{1,2})和(\d{1,3})。

  Capture类:返回匹配子表达式的结果。CaptureCollections返回所有符合子表达式的结果。

  Group类与Capture类的区别

  参考MSDN上的帮助文档(http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.group(v=vs.110).aspx),通过以下代码来说明它们的区别:

 1 using System;
 2 using System.Text.RegularExpressions;
 3
 4 public class Example
 5 {
 6    public static void Main()
 7    {
 8       string pattern = @"(\b(\w+?)[,:;]?\s?)+[?.!]";
 9       string input = "This is one sentence. This is a second sentence.";
10
11       Match match = Regex.Match(input, pattern);
12       Console.WriteLine("Match: " + match.Value);
13       int groupCtr = 0;
14       foreach (Group group in match.Groups)
15       {
16          groupCtr++;
17          Console.WriteLine("   Group {0}: ‘{1}‘", groupCtr, group.Value);
18          int captureCtr = 0;
19          foreach (Capture capture in group.Captures)
20          {
21             captureCtr++;
22             Console.WriteLine("      Capture {0}: ‘{1}‘", captureCtr, capture.Value);
23          }
24       }
25    }
26 }
27 // The example displays the following output:
28 //       Match: This is one sentence.
29 //          Group 1: ‘This is one sentence.‘
30 //             Capture 1: ‘This is one sentence.‘
31 //          Group 2: ‘sentence‘
32 //             Capture 1: ‘This ‘
33 //             Capture 2: ‘is ‘
34 //             Capture 3: ‘one ‘
35 //             Capture 4: ‘sentence‘
36 //          Group 3: ‘sentence‘
37 //             Capture 1: ‘This‘
38 //             Capture 2: ‘is‘
39 //             Capture 3: ‘one‘
40 //             Capture 4: ‘sentence‘

  

  如果在字符后添加了quantifiers(数量词),如在pattern表达式中,(\w+?)用来匹配出现在一个句子当中的多个单词。但是Group对象只返回最后一个匹配(\w+?)的对象。而Capture记录的是每一次匹配(\w+?)的对象。如果没有添加数量词,Capture和Group可用来表示同一个对象。

  下图表示了三者的继承关系(左图),在使用时的层次关系(右图):

  接下来,就是介绍如何写正则表达式。这就是对不同字符串的分类和抽象表示的过程。主要包括以下9种类型:

  1. Character Escapes,转义字符;
  2. Character Classes:表示对字符的抽象分类;
  3. Anchors:锚点,界定字符位置;
  4. Group Construcs:对字符进行组合,使正则引擎想对待一个字符一样处理这个序列,用括号括起一个组;
  5. Quantifiers:数量词,定义字符出现的次数;
  6. Backreference Constructs:使用之前匹配的子表达式再次进行匹配;
  7. Alternation Constructs:选择匹配语句;
  8. Substitutions:字符替换;
  9. Regular Expression Options:正则表达式具体操作选项。

  

  理清楚这些类型之间的关系后,使用正则表达式就会有一个比较清晰的思路和概念。正则表达式的关键就是在于如何写正确的匹配语句,它是后续其它操作的基础。具体的类型格式可参考MSDN的:Quick Reference in PDF (.pdf) format。(具体下载链接:http://msdn.microsoft.com/en-us/library/hs600312.aspx)。

  下面附上一些自己练习的简单正则表达式,以方便有一个直观理解:

1.将首字母替换成大写:

1 string input = "this is a Good mornIng.";
2 string pattern = @"\b([a-z])([a-zA-Z]{2,})\b";
3 string result = Regex.Replace(input, pattern,              match=>match.Groups[1].Value.ToUpper()+match.Groups[2].Value);
4  Console.WriteLine(result);
5
6 //结果:This is a Good MornIng.

  2.替换货币符号:

1 string word = "$12.4 $0.2 $2 3.5";
2 string sub = "$1";
3 string pattern = @"\p{Sc}*(\d+[,.]?\d*)";
4 string result = Regex.Replace(word, pattern, "($1)");
5 Console.WriteLine(result);
6
7 //Result:
8 //(12.4) (0.2) (2) (3.5)

  

时间: 2024-10-25 01:29:37

[正则表达式]基础知识总结的相关文章

javascript之正则表达式基础知识小结

javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料. 元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要用“\”来进行转移. 如果记不清楚那些标点符号需要转移,可以在使用标点符号时都使用反斜杠“\” 简单匹配 1.直接量 /javascript/ 匹配带有“javascript”的字符串 比如“javascript is an object-oriented scripting language” 2.[

转:正则表达式基础知识

一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.如: JScript VBScript 匹配 /^\[ \t]*$/ "^\[ \t]*$" 匹配一个空白行. /\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成. /<(.*)&

正则表达式基础知识(一)

之前在linux中用到三剑客grep.awk.sed等,简单的接触过正则表达式,但是没有深入的了解正则表达式,又一次在python里面接触到正则表达式,所以想着尽量一次攻克正则表达式,所以就将自己学习印记留在此处,供自己复习,同时也将相关知识分享给大家. 分享几个在线测试与学习正则的地址: (1)http://deerchao.net/tutorials/regex/regex.htm  正则表达式30分钟入门 (2)http://tool.oschina.net/regex/ 在线测试以及有部

java正则表达式基础知识(转)

1基础 2.1 简单字符类 构造 描述 [abc] a,b或c [^abc] 除a,b或c外的字符 [a-zA-Z] a至z 或 A至Z [a-d[m-p]] a至d 或 m至p [a-z&&[def]] d,e或f @Test public void testChar() { //匹配 b,c或d assertTrue("d".matches("[bcd]")); //匹配除 a,b,c 以外的字符 (否定) assertTrue("d&

Scala学习笔记--正则表达式基础知识、如何在scala内使用

正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www.jb51.net/tools/zhengze.html  版本:v2.33 (2013-1-10) 作者:deerchao 转载请注明来源 使用格式:  见java API  http://docs.oracle.com/javase/7/docs/api/ java : java.util.reg

正则表达式基础知识及常用表单验证正则(使用时查找为主,需多加基础方法的例子)

一.需要转义的特殊符号,也就是需要在前面添加\:!$ * + = | . ?  \  / [] {}  ^ () 二.正则表达式基本形式及方法:A:re =new RegExp(“a”,“i”);  //new出来的匹配方式B:   re=/a/i ;                            //直接量(更常用) pattern.exec(str)     //返回数组pattern.test(str)       //返回布尔值pattern.toSource(str)    

正则表达式基础知识01

使用元字符 匹配数字: \d [0-9] \D [^0-9] 匹配字母数字 \w [0-9a-zA-Z_] 注意:包括下划线 \W [^0-9a-zA-Z_] 匹配空白字符 \s 任何空白字符[\f\n\r\t\v] \S 任何非空白字符[^\f\n\r\v] [\b] 匹配退格符是一个特例 匹配十六进制是使用\x前缀加数字  \x0A 匹配\n 八进制使用\0前缀加数字 例子: ?  匹配邮箱:[\w\.]+@[\w\.]+\.\w+    但不是最好的,不完整 ?  邮箱第一字母必须是字母或

正则表达式基础知识02

回溯引用:前后一致匹配 回溯引用(backreference)在文本匹配和文本替换操作里非常有用. 例子1:匹配HTML中任意一级的标题栏中的内容例如:<h1>nihao</h1> 模式1:<[hH][1-6]>.*?</[hH][1-6]>  [注意这里使用懒惰型的*] 但是这里模式不是正确的:例如:<H2>abcd</H3> 显示不是正确的 模式2:<[hH]([1-6])>.*?</[hH]\1>   正

正则表达式基础知识

1.1 句点符号 假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以"t"字母开头,以"n"字母结束.另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内容.要构造出这个正则表达式,你可以使用一个通配符--句点符号".".这样,完整的表达式就是"t.n",它匹配"tan"."ten"."tin"和"ton",还匹配"