-1

我需要能够从以花括号开头和结尾的字符串中获取特定元素。如果我有一个字符串:

“asjfaieprnv{1}oiuwehern{0}oaiwefn”

我怎么能只抓住 1,然后是 0。

4

3 回答 3

3

正则表达式对此非常有用。

你要匹配的是:

\{   # a curly bracket
     # - we need to escape this with \ as it is a special character in regex
[^}] # then anything that is not a curly bracket
     # - this is a 'negated character class'
+    #  (at least one time)
\}   # then a closing curly bracket
     # - this also needs to be escaped as it is special

我们可以将其折叠为一行:

\{[^}]+\}

接下来,您可以通过将要提取的部分用括号括起来形成一个来捕获和提取内部内容:

\{([^}]+)\}

在 C# 中,你会这样做:

var matches = Regex.Matches(input, @"\{([^}]+)\}");
foreach (Match match in matches)
{
    var groupContents = match.Groups[1].Value;
}

第 0 组是整个匹配项(在这种情况下包括{and }),第 1 组是第一个带括号的部分,依此类推。

一个完整的例子:

var input = "asjfaieprnv{1}oiuwehern{0}oaiwef";
var matches = Regex.Matches(input, @"\{([^}]+)\}");
foreach (Match match in matches)
{
    var groupContents = match.Groups[1].Value;
    Console.WriteLine(groupContents);
}

输出:

1
0
于 2013-02-26T21:37:11.063 回答
1

使用 Indexof 方法:

int openBracePos = yourstring.Indexof ("{");
int closeBracePos = yourstring.Indexof ("}");
string stringIWant = yourstring.Substring(openBracePos, yourstring.Len() - closeBracePos + 1);

那将是您的第一次出现。您需要对字符串进行切片,以便第一次出现不再存在,然后重复上述过程以找到第二次出现:

yourstring = yourstring.Substring(closeBracePos + 1);

注意:您可能需要转义花括号:“{” - 不确定;从未在 C# 中处理过它们

于 2013-02-26T21:38:25.587 回答
0

这看起来像是正则表达式的工作

using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "asjfaieprnv{1}oiuwe{}hern{0}oaiwefn";
            Regex regex = new Regex(@"\{(.*?)\}");

            foreach( Match match in regex.Matches(str))
            {
                 Console.WriteLine(match.Groups[1].Value);
            }
        }
    }
}
于 2013-02-26T21:40:03.100 回答