从两个字符之间的字符串获取文本

时间:2015-08-06 15:45:26

标签: c# string split

我试图拆开一个字符串并在两个"#"之间获取文本。我已经找到了用Java和PHP做的方法,我假设它们在C#中相似,我只是吉普失败并且非常确定它的PEBKAC。所以我虽然会问。

示例 - 我想以编程方式取出" filenameid"和"姓名"从这个字符串:

'#filenameid#30天#名称#的.xls'

5 个答案:

答案 0 :(得分:5)

尝试拆分

  String source = "#filenameid#30day#Name#.xls";

  String[] chunks = source
    .Split(new Char[] { '#' }, StringSplitOptions.RemoveEmptyEntries);

然后采取适当的块:

  String id = chunks[0];
  String period = chunks[1];
  String name = chunks[2];

答案 1 :(得分:2)

使用捕获组。

@"#([^#]*)#"

从组索引1中获取所需的字符串。请注意,此处的外观不起作用。

答案 2 :(得分:2)

如果您的字符串格式相同,则可以执行以下操作:

string a = "#filenameid#30day#Name#.xls";
string[]split=a.Split('#');
string fileID = split[1];
string name = split[3];

答案 3 :(得分:0)

您可以使用Regex实现它。

void Main()
{
    const string Expression = @"#([^#]*)*#";
    const string TestSample = @"'#filenameid#30day#Name#.xls'";

    Regex regex = new Regex(Expression);

    regex.Matches(TestSample)
         .Cast<Match>()
         .Select(match => match.Captures[0].Value.Replace("#", ""))
         .ToList()
         .ForEach(Console.WriteLine);
}

答案 4 :(得分:0)

以下是该问题的低级解决方案:

static void Main(string[] args) {
    string text = "#filenameid#30day#Name#.xls";

    int frameStart = 0;
    int match = 0;
    // loop on characters
    for(int i = 0; i < text.Length; i++) {
        char c = text[i];
        switch(c) {
            case '#':
                // evaluate frame (text between meshes)
                switch(match) {
                    // match at index 1
                    case 1:
                        Console.Write("filenameid=");
                        Console.WriteLine(text.Substring(frameStart, i - frameStart));
                        break;
                    // match at index 3
                    case 3:
                        Console.Write("name=");
                        Console.WriteLine(text.Substring(frameStart, i - frameStart));
                        break;
                }
                // move to next frame
                frameStart = i + 1;
                match++;
                break;
        }
    }
    // count of matches is match + 1
    Console.ReadKey();
}