C#在分隔符之前/之后删除字符串

时间:2015-12-08 12:00:15

标签: c# regex string

在使用某些分隔符之前或之后,我已经看到很多帖子使用RegEx来删除部分字符串。事实是,我不了解RegEx并且案件有点奇怪。情况如下:

我有一个字符串可以是:

string test1 = (something)...keepThisOne
string test2 = keepThisOne...(something)
string test3 = (something)...keepThisOne...(somethingelse)

到目前为止,我得到了:

string test = testx.Substring(testx.LastIndexOf('.')+1);

但即使对于字符串test1

也不起作用

我知道RegExp可用于删除paranthesis和所有" ..."之间的所有内容。在这个字符串中。我的问题是如何在不事先知道我将获得什么样的字符串测试的情况下使用RegExp实现这一点,以及RegExp的含义是什么?

所需的输出是get only:

string result = keepThisOne

无论使用什么字符串测试。

4 个答案:

答案 0 :(得分:3)

尝试使用Regex:

Regex rgx = new Regex(@"\.*\(\w*\)\.*");
string result = rgx.Replace(input, string.Empty);

正则表达式将生成输出

  

keepThisOne
  keepThisOne
  keepThisOne

您可以在this小提琴中运行各种方案。

答案 1 :(得分:2)

这不需要RegEx:

string test = testx.Split(new string[] { "..." }, StringSplitOptions.RemoveEmptyEntries)
    .Single(s => !s.StartsWith("(") && !s.EndsWith(")"));

这会将原始字符串按点分开,只返回不以括号开头和结尾的部分。

答案 2 :(得分:1)

这是一个适用于所有3种情况的LINQ解决方案:

var res = String.Join("", Char.IsLetter(input.First()) ?
                          input.TakeWhile(c => Char.IsLetter(c)) :
                          input.SkipWhile(c => c != '.')
                               .SkipWhile(c => c == '.')
                               .TakeWhile(c => Char.IsLetter(c)));

答案 3 :(得分:1)

您可以使用此代码(改编自another answer):

using System;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
        Regex rgx = new Regex(@"…*\.*\(\w*\)\.*…*");
        Console.WriteLine(rgx.Replace("(something)…keepThisOne", string.Empty));
        Console.WriteLine(rgx.Replace("keepThisOne…(something)", string.Empty));
        Console.WriteLine(rgx.Replace("(something)...keepThisOne…(somethingelse)", string.Empty));

    }
}

fiddle中试用。