.Net で正規表現に否定を適用しようとしています。それは動作しません。文字列に有効な姓がある場合、正規表現は一致してはなりません。姓が無効な場合は、一致する必要があります。有効な名前には、文字、スペース、一重引用符、および 1 ~ 40 の長さのみを使用できます。誰かが XML を解析することを提案しましたが、私はそうしたくありません。正規表現で否定を削除し、コードで一致条件を反転することで、これを行う別の方法があることを知っています。しかし、私もそれを望んでいません。これには純粋な正規表現ソリューションが必要です。
これが私のコードです。それは有効な姓と一致します。でも合わせたくない。
string toBevalidated = @"<FirstName>SomeName</FirstName><LastName>Some</LastName><Address1>Addre1</Address1>";
var regex = new Regex(@"<LastName>([^a-zA-Z'\s])|(.{41,})</LastName>");
var match = regex.Match(toBevalidated);
// Check to see if a match was found
if (match.Success)
{
Console.WriteLine("Success");
}
else
{
Console.WriteLine("Failed");
}
編集:ここで混乱があります。私が意図した例をいくつか挙げましょう。姓が有効な場合、正規表現は一致しないはずです。たとえば、以下のサンプルは正規表現と一致しないはずです
ケース1
<FirstName>SomeName</FirstName><LastName>Brian</LastName><Address1>Addre1</Address1>
ケース 2
<FirstName>SomeName</FirstName><LastName>O'neil</LastName><Address1>Addre1</Address1>
ケース 3
<FirstName>SomeName</FirstName><LastName>Peter John</LastName><Address1>Addre1</Address1>
姓が無効な場合、正規表現は一致する必要があります
ケース4
<FirstName>SomeName</FirstName><LastName>Brian123</LastName><Address1>Addre1</Address1>
ケース5
<FirstName>SomeName</FirstName><LastName>#Brian</LastName><Address1>Addre1</Address1>
ケース6
<FirstName>SomeName</FirstName><LastName>BrianBrianBrianBrianBrianBrianBrianBrianBrianBrian</LastName><Address1>Addre1</Address1>
さらに情報が必要な場合はお知らせください