在我的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