0

我有以下字符串:

名称(名称,内容(内容,内容,内容),编号)

我需要加粗的部分。有没有办法使用正则表达式来做到这一点?本质上,我认为我需要一种说法:

取所有字符,直到命中此模式:,数字)

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

只需在那里使用匹配组,然后使用Match.Groups.

也许像这样的正则表达式?

.*, (.*\)),
于 2012-08-08T11:28:04.627 回答
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 回答