在C#中的一组字符之前搜索所有内容的字符串

时间:2016-03-21 13:27:19

标签: c# regex string

我正在寻找一种方法来搜索字符串,以便在C#中的一组字符之前搜索所有内容。例如,如果这是我的字符串值:

这是一个测试.... 12345

我希望在" 12345"之前构建一个包含所有字符的新字符串。 所以我的新字符串将等于"这是一个测试...." 有没有办法做到这一点?

我找到了正则表达式示例,您可以将注意力集中在一个字符上,而不是一系列字符上。

7 个答案:

答案 0 :(得分:5)

您不需要使用正则表达式:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="category text-center">
  <li class="sub">
    <h4><b>Licenses</b></h4>
    <ul class="archive_posts">
      <li class="posts"><a href="www.google.com" target="_blank">Licence types and users plans</a>
      </li>
      <li class="posts"><a href="#">Adding new licence</a>
      </li>
      <li class="posts"><a href="#">Updating licence</a>
      </li>
      <li class="posts"><a href="#">Removing licence</a>
      </li>
    </ul>
  </li>
</ul>

答案 1 :(得分:1)

您可以使用延迟量词来匹配任何内容,然后进行前瞻:

<button type="submit" form="form1" value="Submit">Submit</button>

其中:

  • var match = Regex.Match("This is is a test.... 12345", @".*?(?=\d{5})"); 懒洋洋地匹配所有内容(直到前瞻)
  • .*? ... (?=是一个积极的先行:模式必须匹配,但不包含在结果中
  • )恰好匹配五位数。我假设这是你的前瞻;你可以替换它

答案 2 :(得分:1)

你可以在regex lookahead的帮助下完成。

 .*(?=12345)

示例:

var data = "This is is a test.... 12345";

var rxStr = ".*(?=12345)";

var rx = new System.Text.RegularExpressions.Regex (rxStr, 
    System.Text.RegularExpressions.RegexOptions.IgnoreCase);

var match = rx.Match(data);
if (match.Success) {
    Console.WriteLine (match.Value);
}

上面的代码片段将打印到12345的所有内容:

 This is is a test.... 

有关查看正则表达式positive lookahead

的详细信息

答案 3 :(得分:0)

这应该让你开始:

var reg = new Regex("^(.+)12345$");
var match = reg.Match("This is is a test.... 12345");
var group = match.Groups[1]; // This is is a test.... 

当然你想做一些额外的验证,但这是基本的想法。

答案 4 :(得分:0)

你可以拆分,而不是像indexOf解决方案那样最优

string value = "oiasjdoiasj12345";
string end = "12345";
string result = value.Split(new string[] { end }, StringSplitOptions.None)[0] //Take first part of the result, not the quickest but fairly simple

答案 5 :(得分:0)

^表示字符串的开头

$表示字符串结尾

星号告诉引擎尝试将前一个令牌匹配零次或多次。加号告诉引擎尝试匹配前一个令牌一次或多次

{min,max}表示最小/最大匹配数。

\ d匹配单个字符是数字,\ w匹配“字符”(字母数字字符加下划线),\ s匹配空格字符(包括制表符和换行符)。

[^ a]表示不排除

点匹配单个字符,但换行符

除外

在你的情况下,有很多方法可以完成任务。

例如排除数字:^[^\d]*

如果您知道字符集并且它们不仅仅是数字,请不要使用正则表达式IndexOf()。如果您知道第一部分和第二部分之间的分隔符为“...”,则可以使用Split()

答案 6 :(得分:0)

看一下这个片段:

class Program
{
    static void Main(string[] args)
    {
        string input = "This is is a test.... 12345";

        // Here we call Regex.Match.
        MatchCollection matches = Regex.Matches(input, @"(?<MySentence>(\w+\s*)*)(?<MyNumberPart>\d*)");


        foreach (Match item in matches)
        {
            Console.WriteLine(item.Groups["MySentence"]);
            Console.WriteLine("******");
            Console.WriteLine(item.Groups["MyNumberPart"]);
        }
        Console.ReadKey();
    }
}