0

次の文字列があります。

name(name, content(content, content, content) , number)

そして、太字の部分が必要です。正規表現を使用してこれを行う方法はありますか? 基本的に、私は言い方が必要だと思います:

このパターンがヒットするまですべての文字を取得: , 数字)

4

5 に答える 5

1

あなたは簡単なものを試すことができます:

(\w+\([^\(\)]*\))

とあなたのコード:

var result = Regex.Match(inputString,
                     @"(\w+\([^\(\)]*\))")
                     .Groups[1].Value;

説明:

\w+            word characters (a-z, A-Z, 0-9, _)
               (1 or more times)
\(             character '('
[^\(\)]*       any character except: '\(', '\)' 
               (0 or more times)
\)             character ')'

またはこの完全モード:

\w+\s*\(?<yourCon>\w+,\s*([^\)]*\))\s*,\s*\w+\s*\)

そしてあなたのコードはこのようになります:

var result = Regex.Match(inputString, 
                         @"\w+\s*\(?<yourCon>\w+,\s*([^\)]*\))\s*,\s*\w+\s*\)")
                         .Groups["yourCont"].Value;
于 2012-08-08T11:28:44.923 に答える
0

あなたはおそらくこれを試すことができます:

\bcontent\([^\)]+[\)], 

その意味は:

From the word boundary, find "content(" literally.
Match any character that is not a ), greedily
Match a )
Match a ,
于 2012-08-08T11:30:26.933 に答える
0

正規表現である必要がありますか?そうでない場合は、部分文字列を使用して読みやすくすることができます。

あなたの場合、次のようなものです。

var str = "name(name, content(content, content, content), number)";
Console.WriteLine(str.Substring(0, str.IndexOf(',')) + str.Substring(str.LastIndexOf(',')) );

動作するはずです。(タグがあるため、C#だと思います)

于 2012-08-08T11:30:28.727 に答える
0

次の正規表現を使用して、最初のグループの結果をプルします。

(?:.+?\(.+?, )(.+?\))

そして、これはあなたがそれをどのように使うかについての非常に小さな例です。

var input = "name(name, content(content, content, content), number)
var pattern = @"(?:.+?\(.+?, )(.+?\))";

var results = Regex.Match(input, pattern);
if (results.Success)
{
    var value = results.Groups[0];
}
于 2012-08-08T11:33:29.290 に答える
0

そこでマッチグループを使用してから、 でアクセスしてMatch.Groupsください。

おそらくこのような正規表現ですか?

.*, (.*\)),
于 2012-08-08T11:28:04.627 に答える