2013年10月23日 星期三

利用(基礎)REGEX正規化查詢字串中有幾個中文與數字

利用簡易的正規化來看字串中有幾個中文字
首先本篇將會介紹 簡易的正規化如何使用
語法如下
Regex 物件名 = new Regex("pattern")
在pattern放入符號表達式
下面圖表來源為菲力貓的程式設計


符號
表示式
說明或範例
不成立字串
.
a.
表示任何字元。
含字母 "a" 以及其後任一個字元的字串。
Ex: "ab", "bac"
"a", "ba"
重覆字串
*
ab*
表示沒有或更多字元。
"ab*":表示一個字串有一個a後面跟著零個或若干個b
Ex: "a", "ab", "abbb"
+
ab+
一次或更多字元。
"ab+":表示一個字串有一個a後面跟著至少一個b或者更多
Ex: “ab”,”abbbb”
?
ab?
沒有或一次字元。
ab?":表示一個字串有一個a後面跟著零個或者一個b
Ex: “a”,”ab”
[]
[13579]
方括號表示某些字元允許在一個字串中的某一特定位置出現。
包含 "1" "3" "5" "7" "9" 的字串。
Ex: "a3b", "1xy"
"y2k"
[0-9]
含數字之字串
不含數字之字串
[a-z0-9]
含數字或小寫字母之字串
不含數字及小寫字母之字串
[a-zA-Z0-9]
含數字或字母之字串
不含數字及字母之字串
b[aeiou]t
"bat", "bet", "bit", "bot", "but"
"bxt", "bzt"
^[a-zA-Z]
表示一個以字母開頭的字串
[0-9]%
表示一個百分號前有一位元的數位
[a-zA-Z0-9]$
表示一個字串以一個逗號後面跟著一個字母或數位結束
{}
ab{2}
用以表示重復次數的範圍。
表示一個字串有一個a跟著2b
Ex: "abb"
ab{2,}
表示一個字串有一個a跟著至少2b
ab{3,5}
表示一個字串有一個a跟著35b
字串位置
^
^xy
"xy" 開始的字串
Ex: "xyz", "xyab"
"axy", "bxy"
$
xy$
"xy" 結尾的字串
Ex: 例如:"axy", "abxy"
"xya", "xyb"
[^]
[^0-9]
不希望出現的字元,'^'應在方括號裏的第一位。
不含數字之字串
含數字之字串
%[^a-zA-Z]%
兩個百分號中不應該出現字母
[^aeiouAEIOU]
不含母音之字串
含母音之字串
[^\^]
不含 "^" 之字串,例如:"xyz", "abc"
"xy^", "a^bc"
特殊字元
\d
數字0~9
\D
非數字
\w
數字、字母、底線
\W
\w
\s
空白字元 + \r\t\n\f
\S
\s
|
(b¦cd)ef
表示”或”
"bef""cdef"
\
^\^
跳脫字元,將特殊符號的義意去除,^.$()¦*+?{\"這些字元前加上跳脫字元'\'
字首必須是^

 








 


程式碼如下!!

private void btn_GetCount_Click(object sender, EventArgs e)
        {
           
            int P_scalar = 0;//定義值類型變數並賦值為0
            Regex P_regex = //建立正則表達式對象,用於判斷字符是否為中文字
                new Regex("^[\u4E00-\u9FA5]{0,}$");
            for (int i = 0; i < txt_str.Text.Length; i++)//深度搜尋字串中每一個字符
            {
                P_scalar = //如果檢查的字符是中文字則計數器加1沒有則不動作
                    P_regex.IsMatch(txt_str.Text[i].
                    ToString()) ? ++P_scalar : P_scalar;
            }
            txt_count.Text = P_scalar.ToString();//顯示中文字數量
        }


那如果要查詢英文字母呢??  一樣
跟上面差不多 唯一修改的地方是

private void button2_Click(object sender, EventArgs e)
        {
            int COUNT = 0;
            Regex tr = new Regex("^[A-Za-z]");
            for (int w = 0; w < txt_str.Text.Length; w++)
            {
                COUNT = tr.IsMatch(txt_str.Text[w].ToString()) ? ++COUNT : COUNT;
            }
            label3.Text = COUNT.ToString();
        }




顯示數字可以用正規化
不過下面不用正規劃
改用一下 char.IsDigit如果是數字會回傳一個BOOL


private void button1_Click(object sender, EventArgs e)
        {
            int r = 0;//計數器
            char[] MyisDigit = txt_str.Text.ToCharArray();//字轉轉字元陣列
            foreach (char E in MyisDigit)//一個一個搜尋
            {
                while (char.IsDigit(E))//如果是數字則回傳true
                {
                    r = r + 1;
                    break;//跳出while迴圈 不然會永無止境的循環
                }
               
            }
            //將累加結果SHOW出
            MessageBox.Show("字串中有" + r.ToString() + "個數字");
        }

沒有留言:

張貼留言