在我的 C# 应用程序中,我需要搜索字符串以查找它们是否是度量单位的缩写。例如,我需要找到“mm”,代表毫米,“l”代表升,“m2”代表平方米,“kg”代表公斤等等。只有当字符串与模式完全相等时,我才需要匹配,但当模式包含在更大的字符串中时不需要。例如,如果字符串等于“mm”,我想要一个匹配,但不是当字符串是“长度为 55 mm”时。
我知道最简单的方法是使用一系列 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;
}
但它没有按我的意愿工作。我得到了“mm”的匹配,但我也得到了“长度为 55 mm”的匹配
我认为如果我同时使用“^”和“$”锚,它将被解释为“如果在字符串的开头和结尾找到模式则匹配”,这仅在完全相等的情况下才是正确的。但是不,它似乎被解释为“如果在字符串的开头或结尾找到模式则匹配”。
我之前已经使用过正则表达式,但在比这个简单得多的情况下,所以,目前我被卡住了。
预先感谢您的任何帮助。