[英]Error when counting a specific word in a string with Regex.Matches
我試圖找到一種方法來計算字符串中的特定單詞,然后發現了這一點。
using System.Text.RegularExpressions;
MatchCollection matches = Regex.Matches("hi, hi, everybody.", ",");
int cnt = matches.Count;
Console.WriteLine(cnt);
它工作正常,結果顯示為2。但是當我將“,”更改為“。”時,它顯示18,而不是預期的1。為什么?
MatchCollection matches = Regex.Matches("hi, hi, everybody.", ".");
當我將“,”更改為“(”時,它向我顯示一個錯誤!該錯誤顯示為:
SYSTEM.ARGUMENTEXCEPTION - THERE ARE TOO MANY (...
我不明白為什么會這樣
MatchCollection matches = Regex.Matches("hi( hi( everybody.", "(");
其他情況下似乎工作正常,但我需要計算“(”。
第一個實例,帶有.
,使用的特殊字符在正則表達式中具有不同的含義。 它匹配您擁有的所有字符; 因此您得到18的結果。
http://www.regular-expressions.info/dot.html
匹配實際的“。” 字符,您需要對其進行“轉義”,以便將其讀為句號而不是特殊字符。
MatchCollection matches = Regex.Matches("hi, hi, everybody.", "\.");
(
字符也存在。這是一個特殊字符,在正則表達式方面具有不同的含義,您需要對其進行轉義。
MatchCollection matches = Regex.Matches("hi( hi( everybody.", "\(");
看來您是正則表達式的新手,所以建議您閱讀一下,我上面發布的鏈接是一個好的開始。
然而!
如果您只想計算字符串中的出現次數,則不需要正則表達式。
如果您使用的是.NET 3.5,則可以使用LINQ以單線方式執行此操作:
int cnt = source.Count(f => f == '(');
如果您不想使用LINQ,可以使用以下方法:
int cnt = source.Split('(').Length - 1;
第二個參數表示一個模式,不一定只是要在字符串中搜索的字符,而(
本身是無效的模式。
您不需要正則表達式來計算字符的出現。 只需使用LINQ的Count()
:
var input = "hi( hi( everybody.";
var occurrences = input.Count(x => x == '('); // 2
(
字符是一個特殊字符,表示一個組的開始。如果需要使用(
作為文字,則需要使用\\(
進行轉義。)應該可以解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.