簡體   English   中英

使用Regex.Matches計算字符串中的特定單詞時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM