在我的C#應用程序中,我需要搜索字符串以查找它們是否是度量單位的縮寫。例如,我需要找到「毫米」,毫米,「升」升,「平方米」平方米,「千克」千克等。 只有當字符串與模式完全相同時,我才需要匹配,但是當模式包含在較大的字符串中時不需要匹配。例如,如果字符串等於「毫米」,我想要匹配,但不是當字符串是「長度爲55毫米」時。使用正則表達式查找兩個字符串的確切等價性
我知道最簡單的方法是使用一系列if-else if語句和==操作符,但問題可能是我不能預先知道用戶將搜索的所有單元的名稱因爲他們也可以和不同的單位合作。例如,有一次它可能是長度和體積單位(mm,m,cm,m3,l),而在另一些情況下,它可能是電氣單位(A,V,W,MW,kWh)。
所以,我的想法是在項目中添加一個簡短的XML文件,該應用程序將在運行時讀取實際的單位並撰寫用於搜索字符串的正則表達式。 作爲第一次嘗試,我用這個方法:
private bool IsUnit(String theString)
{
Regex regExUnits = new Regex("^(?i)m2|m3|kg|mm|cm|[mthl]$");
Match m = regExUnits.Match(theString);
return m.Success;
}
但是這麼想的工作,因爲我想要的。我得到一個「毫米」的匹配,但我也得到一個匹配的「長度是55毫米」
我認爲,如果我同時使用「^」和「$」錨,它將被解釋爲「匹配如果在起始和處找到該模式並且字符串「結尾」,只有在確切相等的情況下才是真的。但是,不,似乎它被解釋爲「匹配,如果模式在或的開頭和字符串的末尾找到」。
我已經使用過正則表達式,但在比這個更簡單的情況下,所以,暫時我被卡住了。
非常感謝您的幫助。
使用^和$您實際上並不匹配「字符串的開始和結尾」,但是匹配LINE的開頭和結尾。 您需要\ A和\ Z。你可能不會搜索多行字符串,但值得注意的是這一點。 – 2013-03-14 15:58:08