例子记录
1.
string[] dataArray = Regex.Split(lineContent.Trim(), "\\s+", RegexOptions.IgnoreCase);
去掉一行的首尾空格,按照中间1个或多个空格进行拆分,忽略大小写
对字符串操作的一种逻辑公式:匹配/过滤/替代 字符串
对字符串的控制非常简洁快速
感觉,很好用,处理字符串的时候 比如说字符串按照一定格式分割,拼接之类
目标:能够对照手册写出想要的正则表达式
1.基本语法
abc ccccd12 3.
直接匹配:ccc abc [ccc]cd12 3.
\d :单个数字 abc ccccd[1][2] [3].
\D :单个字符(包含特殊字符)[a][b][c][ ][c][c][c][c][d]12[ ][ ][ ][ ]3[.]
\w :单个字符(不包含特殊字符)[a][b][c][c][c][c][c][d]123[.]
\W:特殊字符 abc[ ]ccccd12[ ][ ][ ][ ]3[.]
. :任何字符 [a][b][c][ ][c][c][c][c][d][1][2][ ][ ][ ][ ][3][.]
. :那个. abcccccd123[.]
[a.ed]:字符集 [a]bccccc[d]123[.]
c{1,3}:一个到三个 ab[ccc][cc]d123.
c* :零个或多个 []a[]b[ccccc][]d[]1[]2[]3[].[]
c+:一个或多个 ab[ccccc]d123.
c?:零个或一个 []a[]b[c][c][c][c][c][]d[]1[]2[]3[].[]
\s :匹配空格 abc[ ]ccccd12[ ][ ][ ][ ]3.
\S :匹配非空格 [a][b][c] [c][c][c][c][d][1][2][3][.]
^ :从头开始
组合:^abc.3 从头开始,abc,然后.任何字符,零个或多个,以3结尾
[abc ccccd12 3].
(.) :[(<1>abc ccccd12 3. )][(<1>)]
. :[abc ccccd12 3. ][]
ccd|cc :abc [cc][ccd]12 3.
(ccd|cc) :abc [(<1>cc)][(<1>ccd)]12 3.
This is wenxuejia testing testing testing!
\b :字符边界 \1 :匹配成功group中的第一个
组合:
\b(\w+)\W(\1)\W\W(\1)\b
This is wenxuejia [(<1>testing) (<2>testing) (<3>testing)]!
替换:
替换的内容永远都是原文本的内容,通过正则表达式匹配出来文本,来通过组名或者组号来进行对原文本的替换,替换的位置是用正则表达式匹配出来的内容。
LINK:https://www.cnblogs.com/dwlsxj/p/RegexReplace.html
2.Regex类使用
(该类下面有很多静态方法,可以缓存已有的正则表达式的运算,下次计算的时候速度快很多;(未进行验证))
2.1验证是否匹配
static void Main(string[] args)
{
//1.判断字符串是否符合匹配正则表达式
string[] values = { "111-22-3333", "111-2-3333" };
string pattern = @"^\d{3}-\d{2}-\d{4}$"; //@:不让它转义
foreach (var value in values)
{
if(Regex.IsMatch(value,pattern))
{
Console.WriteLine("{0} is valid", value);
}
else
{
Console.WriteLine("{0} is not valid", value);
}
}
Console.ReadLine();
}
2.2获得匹配结果
private static void RegexMatch()
{
var input = "This is wenxuejia testing testing testing!";
var pattern = @"\b(\w+)\W(\1)\W\W(\1)\b";
Match match = Regex.Match(input, pattern);
while(match.Success)
{
Console.WriteLine("Duplication {0} found",
match.Groups[1].Value);
Console.WriteLine("match.ToString: {0} ", match.ToString());
match = match.NextMatch();
}
}
2.3替换
private static void RegexReplace()
{
string pattern = @"\b\d+\.\d{2}\b";
//$$:包裹替换字符串的单个"$文本" 这不是一句人话,解释一下:$$显示出来就是$ 其他的,一个字符就是一个字符比如说@就是@,2就是2
//$&:把后面的拼接起来
string replacement = "¥$&";
string input = "Total cost: 103.64";
Console.WriteLine(Regex.Replace(input, pattern, replacement));
}
2.4字符串分割
private static void RegexSplit()
{
string input = "1. Egg 2. Bread 3. Milk 4. Coffee";
string pattern = @"\b\d{1,2}\.\s";
foreach(string item in Regex.Split(input,pattern))
{
if(!String.IsNullOrEmpty(item))
{
Console.WriteLine(item);
}
}
}
3.c#的Match类和Group类
Match用于找到 匹配字符串 在字符串中出现的位置
private static void Match()
{
MatchCollection matches;
Regex r = new Regex("abc");
matches = r.Matches("123abc4abcd");
foreach(Match match in matches)
{
Console.WriteLine("{0} found at position {1}",
match.Value, match.Index);
Console.WriteLine("{0}", match.Result("------ $& ------"));
}
}
Group可以方便获取第几个括号中的字符串
private static void Groups()
{
string input = "Born: July 28, 1989";
//每一个括号都代表一个组,完整的是group0,第一个括号是group1
string pattern = @"\b(\w+)\s(\d{1,2}),\s(\d{4})\b";
Match match = Regex.Match(input, pattern);
if(match.Success)
{
for(int i = 0;i < match.Groups.Count;i ++)
{
Console.WriteLine("Group {0}: {1}",
i, match.Groups[i].Value);
}
}
}