網站首頁 編程語言 正文
1、正則表達
Regular Expressiong,Regex、Regexp
常見語法:
- 字符匹配
- 重復匹配
- 字符定位
- 轉義匹配
其他高級語法(字符分組、字符替換和字符決策)
正則表達式軟件:RegEx Tester
匹配規則
- 原樣匹配
元字符匹配:
- 原樣匹配的時候,采用的都是不變的直接量字符
- 采用元字符可以匹配一類字符,元字符可以是一個單獨的字符,也可以是一對(前一個字符通常是反斜杠)元字符:
正則表達式?
- [a-zA-Z]:匹配a到z的任意字符
- [0-9]:匹配0到9的任意數字
轉義字符
如果想查找元字符本身,就必須采用\配合對應院子符來取消特定字符。
如果想查找\或.就采用\或.
限定字符
限定字符又叫重復描述字符,標識一個字符要出現的次數
分組()
Ip地址正則表達式:
Ip地址匹配(需驗證)
((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)
刪除空行:^[\s\t]*\n
2、C#中正則表達式構建與匹配
使用方法:
- 引用命名空間System.Text.RegularExpressions
- 構造正則表達式
- 在使用正則表達式時,要先構造正則表達式,這就用到了Regex類。
其構建方式有兩種:
- 基本形式:Regex(正則表達式)
- 重載形式:Regex(正則表達式,匹配選項)
其中匹配選項提供一些特殊的幫助,是一個枚舉值,包括下面六個值:
- IgnoreCase(忽略大小寫)
- ReghtToLeft(從右向左)
- None(默認)
- CultureInvariant(忽略區域)
- MultLine(多行模式)
- SingleLine(單行模式)
在Regex類中包含IsMatch(),Replace(),Split()等
IsMatch():測試字符是否滿足正則表達式,返回一個布爾值,驗證用戶輸入的數據是否滿足條件(例如是否為合法手機號,是否為合法郵箱等)。
IsMatch()的使用格式:Regex.IsMatch(要判斷的字符串,正則表達式)
using System;
using System.Text.RegularExpressions;
namespace 正則表達式的構建及匹配
{
class Program
{
static void Main(string[] args)
{
//判斷是否為北京市固定電話,區號為010,民用電話號碼為7-8位
string pattern = @"^(010|010-)\d{7,8}$"; //判定的模式
string[] input = { "010-12345678", "01023415678", "01098765897", "031078965476" };
Console.WriteLine("靜態方法");
foreach (string outstr in input)
{
bool mybool = Regex.IsMatch(outstr.Trim(),pattern);
if(mybool)
{
Console.WriteLine(outstr+"是北京固話");
}
else
{
Console.WriteLine(outstr+"不是北京市固話");
}
}
//實例化的方式
Console.WriteLine("實例化方式");
foreach (string outstr in input)
{
Match mymatch = Regex.Match(outstr.Trim(), pattern);
if (mymatch.Success)
{
Console.WriteLine(outstr + "是北京固話");
}
else
{
Console.WriteLine(outstr + "不是北京市固話");
}
}
Console.ReadKey();
}
}
}
正則表達式的替換
格式:Regex.Replace(要搜索匹配項的字符串,要替換的原字符串,替換后的字符串);
using System;
using System.Text.RegularExpressions;
namespace 正則表的是的替換
{
class Program
{
static void Main(string[] args)
{
//將www.替換為http://www.
string mystr = "Welcome to www.darly.net WWW.darly.com WwW.darly.org";
string pattern = @"\bw{3}\.\w+\.(com|net|org)\b";
string replacement1 = @"http://$&"; //$&匹配的內容
string replacement2 = "\n"+ @"http://$&"; //$&匹配的內容,此種方式只是將響應的字符拼接到匹配的字符串前面,
Console.WriteLine("替換前的字符串"+mystr);
Console.WriteLine("替換后的字符串1-1" + Regex.Replace(mystr, pattern, replacement1));
Console.WriteLine("替換后的字符串2-1" + Regex.Replace(mystr, "www.", @"http://www.")); //此種方式是將匹配的內容替換成目標字符
Console.WriteLine("替換后的字符串1_2" + Regex.Replace(mystr, pattern, replacement2,RegexOptions.IgnoreCase));
Console.WriteLine("替換后的字符串2-2" + Regex.Replace(mystr, "www.", "\n"+@"http://www.",RegexOptions.IgnoreCase));
Regex myregex = new Regex(pattern,RegexOptions.IgnoreCase);
string result = myregex.Replace(mystr, replacement2);
Console.WriteLine("替換后的字符串3" +result);
Regex myregex4 = new Regex(pattern,RegexOptions.IgnoreCase);
string result4 = myregex4.Replace(mystr, replacement2);
Console.WriteLine("替換后的字符串4" + result4);
string pattern5 = @"\bw{3}\.";
string replacement5 = "\n" + @"http://www.";
Console.WriteLine("替換后的字符串5" + Regex.Replace(mystr,pattern5,replacement5,RegexOptions.IgnoreCase));
Console.ReadLine();
}
}
}
正則表達式拆分
要通過正則表達式拆分字符串,就要通過Regex類的Split方法,格式為:
Regex.Split(要拆分的字符串,要匹配的正則表達式模式)
using System;
using System.Text.RegularExpressions;
namespace 正則表達式的拆分
{
class Program
{
static void Main(string[] args)
{
string input = "一、張三 二、李四 三、王五 四、趙六";
string patern = @"\b[一二三四]、";
Console.WriteLine(Type.GetType((Regex.Split(input, patern)).ToString()));
foreach (string outstr in Regex.Split(input,patern))
{
if(!string.IsNullOrEmpty(outstr))Console.WriteLine(outstr);
}
Console.ReadKey();
}
}
}
HashTable概述及元素添加
HashTable也被稱作為哈希表,鍵值對或者關聯數組。
用于處理和表寫類似Ken/value的減值對,其中Key通常可用來快速查找,同時Key是區分大小寫;Value用于存儲對應于Key的值。HashTable中key/value鍵值對均為Object類型,所有HashTable可以支持任何類型的Key/Value鍵值對。
Hashtable特點:鍵與值成對存在,鍵時唯一的不能重復的
HashTable中的每個元素時一個存儲在DictionaryEntry對象中的鍵值對
HashTable優點 :把數據的存儲和查找的時間大降低幾乎可以看成是常數時間;而代價僅僅小號比較多的內容。然而在當前可利用內存越來越多的情況下,用空間換取時間的做法是可取的。另外,編碼比較容易也是他的特點之一。
聲明格式:
引入命名空間:using System.Collections;
元素添加方法 Add
using System;
using System.Collections;
namespace Hasehtable1
{
class Program
{
static void Main(string[] args)
{
Hashtable ht = new Hashtable();
ht.Add("name", "darly");
ht.Add("gender", "男");
ht[3] = "王五"; //用此種方式一堆Hashtable去增加元素時應該注意
//如果對應的鍵key存在只是達到一種重新賦值的結果,如果不存在才會增加對應鍵值對
ht["gender"] = "女";
//數組通過length可以確定長度
//集合是通過count來確定個數
Console.WriteLine(ht.Count);
Console.ReadKey();
}
}
}
Hashtable遍歷
遍歷用到DictionaryEntry(字典鍵/值對)
using System;
using System.Collections;
namespace Hasehtable1
{
class Program
{
static void Main(string[] args)
{
Hashtable ht = new Hashtable();
ht.Add("name", "darly");
ht.Add("gender", "男");
ht[3] = "王五"; //用此種方式一堆Hashtable去增加元素時應該注意
//如果對應的鍵key存在只是達到一種重新賦值的結果,如果不存在才會增加對應鍵值對
ht["gender"] = "女";
ht["department"] = "測試部";
//數組通過length可以確定長度
//集合是通過count來確定個數
Console.WriteLine(ht.Count);
foreach(object myobj in ht)
{
Console.WriteLine(myobj); //此處僅僅輸入的是類型
}
foreach (DictionaryEntry myobj in ht)
{
Console.WriteLine("鍵為:{0},值為:{1}",myobj.Key,myobj.Value);
}
foreach(object myobj in ht.Keys)
{
Console.WriteLine("鍵為:{0};值為{1}", myobj,ht[myobj]);
}
Console.ReadKey();
}
}
}
Hashtable元素的刪除
- Remove
- Clear
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Hashtable元素刪除
{
class Program
{
static void Main(string[] args)
{
Hashtable ht = new Hashtable();
ht.Add(1, "張颯");
ht.Add(true,"李四");
ht.Add(false, "王五");
ht.Add(3, "趙六");
foreach(DictionaryEntry myde in ht)
{
Console.WriteLine("鍵為{0},值為:{1}", myde.Key, myde.Value);
}
//刪除Remove
ht.Remove(false);
Console.WriteLine("移除結果");
foreach (DictionaryEntry myde in ht)
{
Console.WriteLine("鍵為{0},值為:{1}", myde.Key, myde.Value);
}
//刪除Clear,刪除所有內容
ht.Clear();
Console.WriteLine("清除結果");
foreach (DictionaryEntry myde in ht)
{
Console.WriteLine("鍵為{0},值為:{1}", myde.Key, myde.Value);
}
Console.ReadLine();
}
}
}
HashTable元素查找
Hashtable特點:鍵與值成對存在,鍵時唯一的不能重復的,在查找元素的時候,我們往往是依據鍵查找值的。
三種方法:(前兩種方法是實質是一樣的)
- Contains
- ContainsKey
- ContainsValue
using System;
using System.Collections;
namespace Hashtable元素查找
{
class Program
{
static void Main(string[] args)
{
Hashtable ht = new Hashtable();
ht.Add(1, "張三");
ht.Add(2, "里斯");
ht.Add(3, "王五");
ht.Add(4, "趙六");
ht[5] = "何七";
ht[6] = "張三";
Console.WriteLine("添加的結果");
foreach(DictionaryEntry myde in ht)
{
Console.WriteLine("鍵為{0}——職位{1}", myde.Key, myde.Value);
}
//元素查找
if(ht.ContainsKey(1)) //ContainsKey()存在返回true,不存在返回false
Console.WriteLine("存在鍵=1的元素");
else Console.WriteLine("不存在該該鍵");
if (ht.ContainsValue("張三")) Console.WriteLine("存在值為張三的元素");
else Console.WriteLine("不存在值為張三的元素");
Console.Read();
}
}
}
任務小結
統計指定字符串(字符串可自行聲明)中漢字的個數以及每個漢字出現的次數,將其輸出到屏幕上
編程思路:
- 判斷漢字,可以通過正則表達式
- 然后可將對應漢字存入ArrayList中
- 通過一定的運算規則,計算出漢字的個數與出現的次數并將結果對應存入Hashtable
- 遍歷Hashtable即可完成任務實施
using System;
using System.Text.RegularExpressions;
using System.Collections;
namespace 任務小結
{
class Program
{
static void Main(string[] args)
{
//統計指定字符串(字符串可自行聲明)中漢字的個數以及每個漢字出現的次數,將其輸出到屏幕上
Console.WriteLine("請輸入一個字符串,系統將自動計算漢字個數以及每個漢字的出現次數");
string mystr = Console.ReadLine();
string pattern = @"[^\u4e00-\u9fa5]"; //判定非漢字的字符,將非漢字的字符替換掉就是全部的漢字
Regex myregex = new Regex(pattern);
string chnstr = myregex.Replace(mystr, "");
Hashtable ht = new Hashtable();
for (int i = 0; i < chnstr.Length; i++)
{
int val = 1;
if(ht.ContainsKey(chnstr[i]))
{
val = Convert.ToInt32(ht[chnstr[i]]);
++val;
ht[chnstr[i]] = val;
}
else
{
ht.Add(chnstr[i], val);
}
}
Console.WriteLine("原有的字符串是:" + mystr);
foreach (DictionaryEntry de in ht)
{
Console.WriteLine("漢字{0}出現了{1}次",de.Key,de.Value);
}
Console.ReadKey();
}
}
}
原文鏈接:https://blog.csdn.net/Mwyldnje2003/article/details/123299554
相關推薦
- 2024-03-06 SpringAOP基于注解方式實現和細節
- 2024-03-04 新版ECharts實現“暫無數據”的完美解決方案
- 2023-04-01 JQuery動態生成的按鈕無法觸發問題及完美解決方法_jquery
- 2022-09-27 淺談Redis緩存更新策略_Redis
- 2022-03-15 ./configure: error: the HTTP rewrite module requir
- 2022-12-21 Redis數據庫原理深入刨析_Redis
- 2022-12-01 Go語言實戰之實現一個簡單分布式系統_Golang
- 2024-04-06 npm install安裝插件很慢,解決方法
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支