在字符串中搜索子字符串

时间:2014-08-22 17:44:41

标签: c# regex string

(道歉,我对c#来说很新)

给出以下字符串:

SELECT * FROM TABLE WHERE sDATE ='~~Date~~' AND sName = '~~Some NAME~~'

我需要提取Date& Some NAME从上面的字符串变成数组。

  • ~~
  • 中的日期和某些名称并不总是如此
  • 字符串中可能只有一个~~x~~,可能有两个或更多
  • ~~x~~可以是任意长度,可以包含数字,字母和空格
  • ~~x~~将始终以~~
  • 开头和结尾
  • ~~x~~可能引用也可能不引用

对于给定的字符串,我想获得找到的值的数组。我可以使用~~Date~~Date

我认为这可能是一个正则表达式的情况。我看过.Split.IndexOf.Contains,但没有一个能让我得到我想要的东西,因为我并不总是在寻找相同的东西串。

更新

这不是严格的SQL解析,这只是一个简单的例子。字符串也可以是

My name is ~~Some NAME~~ and I'm hunting for some help

1 个答案:

答案 0 :(得分:2)

根据您的描述,类似(并假设您要捕获的字符串中没有~~):

~~(.*?)~~

会在捕获组中的一对~~之间为您提供文本。如果您愿意,可以将.更改为更具限制性的内容。

示例:https://dotnetfiddle.net/t6i7rx

    var s = "SELECT * FROM TABLE WHERE sDATE ='~~Date~~' AND sName = '~~Some NAME~~'";
    Regex r = new Regex(@"~~(.*?)~~");
    foreach (Match m in r.Matches(s)) {
        Console.WriteLine(m.Groups[1]);
    }

输出:

Date
Some NAME

请注意*?*的重要性。 *本身就是贪婪的,并且会尽可能地匹配。因此,它会返回Date~~' AND sName = '~~Some NAME,因为它会占用第一个和最后一个~~之间的所有内容。添加?会使其变得懒惰。