例子記錄
1.
string[] dataArray = Regex.Split(lineContent.Trim(), "\\s+", RegexOptions.IgnoreCase);
去掉一行的首尾空格五嫂,按照中間1個(gè)或多個(gè)空格進(jìn)行拆分夺巩,忽略大小寫
對(duì)字符串操作的一種邏輯公式:匹配/過(guò)濾/替代 字符串
對(duì)字符串的控制非常簡(jiǎn)潔快速
感覺(jué),很好用,處理字符串的時(shí)候 比如說(shuō)字符串按照一定格式分割缎浇,拼接之類
目標(biāo):能夠?qū)φ帐謨?cè)寫出想要的正則表達(dá)式
1.基本語(yǔ)法
abc ccccd12 3.
直接匹配:ccc abc [ccc]cd12 3.
\d :?jiǎn)蝹€(gè)數(shù)字 abc ccccd[1][2] [3].
\D :?jiǎn)蝹€(gè)字符(包含特殊字符)[a][b][c][ ][c][c][c][c][d]12[ ][ ][ ][ ]3[.]
\w :?jiǎn)蝹€(gè)字符(不包含特殊字符)[a][b][c][c][c][c][c][d]123[.]
\W:特殊字符 abc[ ]ccccd12[ ][ ][ ][ ]3[.]
. :任何字符 [a][b][c][ ][c][c][c][c][d][1][2][ ][ ][ ][ ][3][.]
. :那個(gè). abcccccd123[.]
[a.ed]:字符集 [a]bccccc[d]123[.]
c{1,3}:一個(gè)到三個(gè) ab[ccc][cc]d123.
c* :零個(gè)或多個(gè) []a[]b[ccccc][]d[]1[]2[]3[].[]
c+:一個(gè)或多個(gè) ab[ccccc]d123.
c?:零個(gè)或一個(gè) []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蒋院,然后.任何字符,零個(gè)或多個(gè)契沫,以3結(jié)尾
[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中的第一個(gè)
組合:
\b(\w+)\W(\1)\W\W(\1)\b
This is wenxuejia [(<1>testing) (<2>testing) (<3>testing)]!
替換:
替換的內(nèi)容永遠(yuǎn)都是原文本的內(nèi)容,通過(guò)正則表達(dá)式匹配出來(lái)文本昔汉,來(lái)通過(guò)組名或者組號(hào)來(lái)進(jìn)行對(duì)原文本的替換懈万,替換的位置是用正則表達(dá)式匹配出來(lái)的內(nèi)容。
LINK:https://www.cnblogs.com/dwlsxj/p/RegexReplace.html
2.Regex類使用
(該類下面有很多靜態(tài)方法,可以緩存已有的正則表達(dá)式的運(yùn)算钞速,下次計(jì)算的時(shí)候速度快很多贷掖;(未進(jìn)行驗(yàn)證))
2.1驗(yàn)證是否匹配
static void Main(string[] args)
{
//1.判斷字符串是否符合匹配正則表達(dá)式
string[] values = { "111-22-3333", "111-2-3333" };
string pattern = @"^\d{3}-\d{2}-\d{4}$"; //@:不讓它轉(zhuǎn)義
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獲得匹配結(jié)果
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";
//$$:包裹替換字符串的單個(gè)"$文本" 這不是一句人話,解釋一下:$$顯示出來(lái)就是$ 其他的渴语,一個(gè)字符就是一個(gè)字符比如說(shuō)@就是@苹威,2就是2
//$&:把后面的拼接起來(lái)
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用于找到 匹配字符串 在字符串中出現(xiàn)的位置
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可以方便獲取第幾個(gè)括號(hào)中的字符串
private static void Groups()
{
string input = "Born: July 28, 1989";
//每一個(gè)括號(hào)都代表一個(gè)組,完整的是group0驾凶,第一個(gè)括號(hào)是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);
}
}
}