1

RegexSQL文字列のフィールドを翻訳するために使用する次のものがあります

string posLookBehind = @"(?<=\p{P}*)\b";
string posLookAhead = @"\b(?=\p{P}*)";
string keyword = "FieldA";
string translatedKeyword = "FldA";
string strSql = "SELECT [FieldA] FROM SomeTableA;";
strSql = Regex.Replace(
    strSql,
    baseRegexLeft + keyword + baseRegexRight,
    translatedKeyword, 
    RegexOptions.IgnoreCase);

一部のキーワードFieldAについて、上記の正規表現は、次のそれぞれで「FieldA」を「FldA」に置き換え[FieldA]ます[FieldA + FieldB]。ただし、正規表現を制限したいと思います。単一のアポストロフィに 'FieldA' 注意してください

したがって、正規表現の減算を使用して正規表現を変更し'、句読点セットから削除しました。

string posLookBehind = @"(?<=[\p{P}-[']]*)\b";
string posLookAhead = @"\b(?=[\p{P}-[']]*)";

他のコードは同じです。しかし、これはまだ一致してい'FieldA'ます。ここで何が間違っていますか?

御時間ありがとうございます。

4

1 に答える 1

2

この背後にある理由は、ルック ビハインドとルック アヘッドのスターであると思います。これは、*ゼロ以上に一致するためです。したがって、それ自体を照合した後、FieldAアポストロフィではなく、アポストロフィがあるため、ゼロ以上の句読点を後ろにチェックします。ゼロ回だけ一致します。

これを修正するには、星をプラスに変更します+

string posLookBehind = @"(?<=[\p{P}-[']]+)\b";
string posLookAhead = @"\b(?=[\p{P}-[']]+)";

または、常に周囲の文字が 1 つしかない場合:

string posLookBehind = @"(?<=[\p{P}-[']])\b";
string posLookAhead = @"\b(?=[\p{P}-[']])";
于 2013-09-16T16:17:03.980 に答える