私のC#アプリでは、文字列を検索して、それらが測定単位の略語であるかどうかを確認する必要があります。たとえば、ミリメートルの場合は「mm」、リットルの場合は「l」、平方メートルの場合は「m2」、キログラムの場合は「kg」などを見つける必要があります。文字列がパターンと完全に等しい場合にのみ一致が必要ですが、パターンがより大きな文字列に含まれている場合は必要ありません。たとえば、文字列が「mm」に等しい場合、一致させたいのですが、文字列が「長さ55mm」の場合は一致しません。
最も簡単な方法は、一連のif-else ifステートメントと==演算子を使用することですが、問題になる可能性があるのは、ユーザーが検索するすべてのユニットの名前が事前にわからないことです。 、それらは異なるユニットのセットで動作する可能性があります。たとえば、ある場合は長さと体積の単位(mm、m、cm、m3、l)であり、他の場合は電気単位(A、V、W、MW、kWh)である可能性があります。
したがって、私のアイデアは、アプリケーションが実行時に実際の単位を読み取り、文字列の検索に使用する正規表現を作成するwitchからの短い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」に一致しますが、「長さ55mm」にも一致します。
「^」と「$」の両方のアンカーを使用すると、「パターンが文字列の最初と最後にある場合に一致する」と解釈されると思いました。これは、完全に等しい場合にのみ当てはまります。しかし、いいえ、「パターンが文字列の最初と最後にある場合は一致する」と解釈されているようです。
私は以前に正規表現を使用したことがありますが、これよりもはるかに単純なケースであるため、今のところ行き詰まっています。
よろしくお願いします。