7

私は現在、翻訳プロジェクトに取り組んでいます。私が遭遇した問題の1つは、単語の特殊文字を置き換えようとしているときです。

例えば:

[Animal] can be furry.
Dog is an [Animal].

に置き換える必要があり[Animal]ますAnimal。単語全体を置き換える必要があることに注意してください。したがって、結果は次のようになります。

Animal can be furry.
Dog is an Animal.

また、私が言ったように、それは完全な言葉でなければなりません。だから私が持っている場合:

[Animal][Animal][Animal] can be furry.-結果はまだ

[Animal][Animal][Animal] can be furry.-何も起こら[Animal]なかったのと同じではありません[Animal][Animal][Animal]

サンプル:

string originalText1 = "[Animal] can be furry";
string badText ="[Animal]";
string goodText = "Animal";

Regex.Replace(originalText1,  Regex.Escape(badText), Regex.Escape(goodText));

全て大丈夫。しかし、私が言ったように、私は単語全体を置き換える必要があります。上記のコードでは、「 」は「 [Animal]can be furry」に置き換えられAnimalcan be furryます。これは「いいえ」です。

だから私も試しました:

Regex.Unescape(
 Regex.Replace(
  Regex.Escape(originalText1), 
  String.Format(@"\b{0}\b", Regex.Escape(badText)), 
  Regex.Escape(goodText)))

それでも動作しません。そして今、私は迷子になっています。助けてください。

また、ほぼ同じような投稿がありますが、その質問では単語全体を置き換える必要はありませんでした。私はほぼ3時間ネットを調べましたが、役に立ちませんでした。あなたの助けは大歓迎です。ありがとう!

4

4 に答える 4

1

私はそれをテストしていませんが、これを試してみます:

Regex.Replace(orginalText, @"\b\[Animal\]\b", "Animal");

これは、単語境界 (\b) の [Animal] にのみ一致します。

于 2012-10-15T11:58:20.977 に答える
0

私にとってこれはうまくいきます:

string s = @"[Animal][Animal][Animal] can be furry. - nothing happened as [Animal] is not the same as [Animal][Animal][Animal]
[Animal] can be furry.
[Animal]
can [Animal]
be furry
my [Animal] is furry";
string mask = "(^|\\s)\\[Animal\\](\\s|$)";
string rep = "$1Animal$2";
string s2 = "";
s2 = Regex.Replace(mask, rep);

/*
s2 = "[Animal][Animal][Animal] can be furry. - nothing happened as Animal is not the same as [Animal][Animal][Animal]
Animal can be furry.
Animal
can Animal
be furry
my Animal is furry" */

マスクに「特殊文字」を追加することもできます。

string mask = "(^|\\s|'|\")\\[Animal\\](\\s|$|,|\\?|\\.|!|'|\")";
于 2012-10-15T12:28:34.640 に答える
0

これは私にとってはうまくいきます。それを試してみて、それがあなたが探しているものかどうか教えてください.

string originalText1 = "[Animal] can be furry";
string badText = @"(?:(?<=^|\s)(?=\S)|(?<=\S|^)(?=\s))" + Regex.Escape("[Animal]") + @"(?:(?<=\S)(?=\s|$)|(?<=\s)(?=\S|$))";
string goodText = "Animal";
string newString = Regex.Replace(originalText1, badText, goodText);
Console.WriteLine(newString);
//"Animal can be furry"

originalText1 = "[Animal]can be furry";
newString = Regex.Replace(originalText1, badText, goodText);
Console.WriteLine(newString);
//"[Animal]can be furry"

ここにあります

于 2012-10-15T12:14:38.763 に答える
0

ここでの最も簡単なアプローチは、後読みと先読みを使用して、括弧で囲まれたテキストが「実際の」一致であることを確認することだと思います。正確な要件はわかりませんが、探しているようです:

  1. 角括弧で囲まれた検索文字列 (例: [Animal])
  2. 文字列の先頭、または空白、または場合によっては何らかの句読点が先行します。
  3. 文字列の末尾、または空白、または場合によっては句読点が続きます (たとえば、ピリオドが続きます)。Dog is an [Animal].

最初のものは簡単です: \[Animal\].

2 番目の場合は、後読みを使用して前の文字が適切であることを確認できます:
(?<=(^|\s))、最後の場合は先読み:(?=($|\s|\.))

つまり、正規表現全体は次のようになります。

var pattern = @"(?<=^|\s)\[Animal\](?=$|\s|\.)";
var output = Regex.Replace(input, pattern, "Animal");

必要に応じて、先読み/後読みに句読点を追加する必要がある場合があります。

あなたの質問の例について:

Input: "[Animal] can be furry."
Output: "Animal can be furry."

Input: "Dog is an [Animal]."
Output: "Dog is an Animal."

Input: "[Animal][Animal][Animal] can be furry."
Output: "[Animal][Animal][Animal] can be furry."

Input: "[Animal]can be furry"
Output: "[Animal]can be furry"
于 2012-10-15T12:15:57.673 に答える