2

次の入力を検討してください: BEGINsomeotherstuffEND

BEGIN と END を置き換える正規表現を作成しようとしていますが、両方が存在する場合に限ります。

私は限りました:

(^BEGIN|END$)

次の c# コードを使用して、文字列の置換を実行します。

private const string Pattern = "(^guid'|'$)";
private static readonly Regex myRegex = new Regex(Pattern, RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture | RegexOptions.Singleline | RegexOptions.IgnoreCase);
var newValue = myRegex.Replace(input, string.empty);

しかし残念なことに、それは両方が存在する場合だけでなく、それらのいずれかに一致します。

私も試しました:

^BEGIN.+END$

しかし、それは文字列全体をキャプチャするため、文字列全体が置き換えられます。

私の正規表現に関する知識はこれくらいです。

ヘルプ!

4

3 に答える 3

5

ここで正規表現が本当に必要だとは思いません。次のようなものを試してください:

if (str.StartsWith("BEGIN") && str.EndsWith("END"))
    str = "myreplaceBegin" + str.Substring(5, str.Length - 8) + "myreplaceEnd";

あなたのコードから、最初と最後の部分を削除したいだけのように見えるので(それらを何かに置き換えないでください)、次のようにすることができます:

if (str.StartsWith("BEGIN") && str.EndsWith("END"))
    str = str.Substring(5, str.Length - 8);

もちろん、インデックスを削除するものの実際の長さに置き換えてください。

于 2012-11-28T06:37:04.917 に答える
5

これを使用するのはどうですか:

^BEGIN(.*)END$

次に、文字列全体をその間の部分だけに置き換えます。

var match = myRegex.Match(input);
var newValue = match.Success ? match.Groups(1).Value : input;
于 2012-11-28T06:38:19.043 に答える
1

正規表現を解析エンジンとして使用することはできません。ただし、これをひっくり返して、その中間が欲しいと言うことができます。

begin(.*)end

次に、グループ1にあるものをつかみます

于 2012-11-28T06:36:54.203 に答える