正则表达式的使用,字符串提取,字符串匹配(C#语言)
在程序中常常设计字符串的处理,比如①:判断用户的输入字符串是否符合要求,是否是非法字符串,②:取出一个很复杂字符串的某一程序中需要的部分等
这事用自己写算法判断通常是十分困难的,所以遇到字符串的处理时要很快想到用正则表达式。
一:正则表达式元字符
Regex.IsMatch("bbbbg","^b.*g $");
Regex.IsMatch("bg", "^b.*g $ ");
Regex.IsMatch("gege", "^b.*g $ ");
一定不能忘了^和$,否则也能匹配yesbagit
例如:
Regex.IsMatch("119", @"^\d{6}$");
解释:由元字符定义得知"[0-9]"表示0到9的任意字符,"{6}"表示前面的字符匹配6此,因此“[0-9]{6}”中的{6}表示对数字匹配6次。简写表达式得知“[0-9]”可以被“\d”代替,所以第二种写法“\d{6}”也是正确的。不要忘了@或者\\d
Match match = Regex.Match("age=30", @"^(. +)=(.+)$");
if (match.Success)
{
Console.WriteLine(match.Groups[1] .Value);
Console.WriteLine(match.Groups[2] .Value);
}
match的Success属性表示是否匹配成功;正则表达式中用()将要提取的内容括起来,然后就可以通过Match的Groups属性来得到所有的提取元素,注意Groups的序号是从1开始的,0有特殊含义
贪婪模式与非贪婪模式
MatchCollection matches = Regex.Matches("大家好,我是Hebe,我22岁了,身高180,我们团队有3个女女!", @"\d+");
foreach(Match match in matches)
{Console.WriteLine(match.Value);}
3.C#字符串提取示例代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Text.RegularExpressions; namespace 正则表达式取括号里面的值 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //使用正则表达式将,字符串中的需要的数据取出来 //本例去除host,port,已经sid的值 private void button1_Click(object sender, EventArgs e) { string host; string PORT; string SID; string str = "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ahnu)(PORT = 1521)))(CONNECT_DATA = (SID =orcl)))"; str = str.Trim(); //方法一:一个一个取,有针对性, Match match = Regex.Match(str, @"\(HOST=?(.+?)\)"); if (match.Success) { host = match.Groups[1].Value; } match = Regex.Match(str, @"\(PORT=?(.+?)\)"); if (match.Success) { PORT = match.Groups[1].Value; } match = Regex.Match(str, @"\(SID=?(.+?)\)"); if (match.Success) { SID = match.Groups[1].Value; } //方法二:取出所有的匹配字符串,这里只是介绍如果多个字符串匹配如何处理。 MatchCollection mts = Regex.Matches(str, @"\(HOST(.+?)=?(.+?)\)"); for (int i = 0; i < mts.Count; i++) { Match mt = mts[i]; MessageBox.Show(mt.Value); MessageBox.Show(mt.Groups[1].Value); } //方法三:先取出一部分然后作为新的字符串再提取,这样做避免正则表达式的部分写错而匹配不了 情况。 Match m = Regex.Match(str, @".+?=.+?=.+?=(.+?)\)\).+?=(.+?)\)\)"); if (m.Success) { string s1 = m.Groups[1].Value;//" (PROTOCOL = TCP)(HOST = AHNU)(PORT = 1521" string s2 = m.Groups[2].Value;// (SID =ORCL" if (m.Success) { string str3 = m.Groups[1].Value; string str4 = m.Groups[2].Value; //" (PROTOCOL = TCP)(HOST = AHNU)(PORT = 1521" if (m.Success) { host = m.Groups[1].Value; PORT = m.Groups[2].Value; } m = Regex.Match(s2, @"\(.+?=(.+)"); if (m.Success) { SID = m.Groups[1].Value; } } } } } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。