文字列を解析し、各Guid値を単一引用符で囲む必要があります。私はこれを行うために正規表現を使用できると考えていましたが、私は正確に正規表現の第一人者ではありません。
GUIDを識別するために使用する適切な正規表現はありますか?
2番目の質問は、Regex.Replace(String, String, MatchEvaluator)
を使用すると想定している有効な正規表現を見つけた後ですが、構文がよくわかりません。たぶん次のようなもの:
return Regex.Replace(stringToFindMatch, GuidRegex, match =>
{
return string.Format("'{0}'", match.Groups[0].ToString());
});
解析しようとしている文字列は次のようになります。
「passwordco0_.PASSWORD_CONFIG_IDをPASSWORD1_46_0_として、PASSWORD_CONFIG passwordco0_からWHERE passwordco0_.PASSWORD_CONFIG_ID = baf04077-a3c0-454b-ac6f-9fec00b8e170; @ p0 = baf04077-a3c0-454b-ac6f-9fec00bid」
これは非常に単純であり、あなたが言うようにデリゲートを必要としません。
resultString = Regex.Replace(subjectString,
@"(?im)^[{(]?[0-9A-F]{8}[-]?(?:[0-9A-F]{4}[-]?){3}[0-9A-F]{12}[)}]?$",
"'$0'");
これは、GUIDのすべての同等で許容可能な形式である次のスタイルと一致します。
ca761232ed4211cebacd00aa0057b223
CA761232-ED42-11CE-BACD-00AA0057B223
{CA761232-ED42-11CE-BACD-00AA0057B223}
(CA761232-ED42-11CE-BACD-00AA0057B223)
アップデート1
@NonStaticは、上記の正規表現が間違った終了区切り文字を持つ誤検知に一致するというコメントを指摘しています。
これは、広くサポートされている正規表現条件によって回避できます。
条件は、JGsoftエンジン、Perl、PCRE、Python、および.NETフレームワークでサポートされています。 Rubyは、バージョン2.0以降でサポートしています。 PCREに基づく正規表現機能を備えたDelphi、PHP、Rなどの言語も条件をサポートしています。 (ソース http://www.regular-expressions.info/conditional.html )
続く正規表現は一致します
{123}
(123)
123
そして、一致しません
{123)
(123}
{123
(123
123}
123)
正規表現:
^({)?(\()?\d+(?(1)})(?(2)\))$
ソリューションは、必要に応じて必要なものをより明確な方法で示すために、数字のみに一致するように簡素化されています。
最も基本的な正規表現は次のとおりです。
(^([0-9A-Fa-f]{8}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{12})$)
または ここに貼り付けてください 。
これで時間を節約できることを願っています。
http://regexhero.net/tester/ を使用すると、C#コードを簡単に自動生成できます。
それは無料です。
ここに私がそれをした方法があります:
次に、Webサイトは.NETコードを自動生成します。
string strRegex = @"\b[A-F0-9]{8}(?:-[A-F0-9]{4}){3}-[A-F0-9]{12}\b";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @" {CD73FAD2-E226-4715-B6FA-14EDF0764162}.Debug|x64.ActiveCfg = Debug|x64";
string strReplace = @"""$0""";
return myRegex.Replace(strTargetString, strReplace);
.NET Framework 4には、System.Guid構造の強化があります。これらには、GUIDを解析するための新しいTryParseおよびTryParseExactメソッドが含まれます。以下に例を示します。
//Generate New GUID
Guid objGuid = Guid.NewGuid();
//Take invalid guid format
string strGUID = "aaa-a-a-a-a";
Guid newGuid;
if (Guid.TryParse(objGuid.ToString(), out newGuid) == true)
{
Response.Write(string.Format("<br/>{0} is Valid GUID.", objGuid.ToString()));
}
else
{
Response.Write(string.Format("<br/>{0} is InValid GUID.", objGuid.ToString()));
}
Guid newTmpGuid;
if (Guid.TryParse(strGUID, out newTmpGuid) == true)
{
Response.Write(string.Format("<br/>{0} is Valid GUID.", strGUID));
}
else
{
Response.Write(string.Format("<br/>{0} is InValid GUID.", strGUID));
}
この例では、新しいGUIDオブジェクトを作成し、無効なGUIDを持つ1つの文字列変数も使用します。その後、TryParseメソッドを使用して、両方の変数に有効なGUID形式があるかどうかを検証します。例を実行すると、文字列変数に有効なGUID形式がなく、「InValid guid」というメッセージが表示されることがわかります。文字列変数に有効なGUIDがある場合、これはTryParseメソッドでtrueを返します。
C#.Netが特定のテキストからguidのような文字列を見つけて置換するには、
この正規表現を使用します。
[({]?[a-fA-F0-9]{8}[-]?([a-fA-F0-9]{4}[-]?){3}[a-fA-F0-9]{12}[})]?
C#コードの例:
var result = Regex.Replace(
source,
@"[({]?[a-fA-F0-9]{8}[-]?([a-fA-F0-9]{4}[-]?){3}[a-fA-F0-9]{12}[})]?",
@"${ __UUID}",
RegexOptions.IgnoreCase
);
確かに動作します!また、次のスタイルに一致し、置き換えられます。これらのスタイルはすべて、GUIDの同等で許容可能な形式です。
"aa761232bd4211cfaacd00aa0057b243"
"AA761232-BD42-11CF-AACD-00AA0057B243"
"{AA761232-BD42-11CF-AACD-00AA0057B243}"
"(AA761232-BD42-11CF-AACD-00AA0057B243)"
より簡単な正規表現パターンを使用します
^[0-9A-Fa-f\-]{36}$