(道歉,我对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
答案 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
,因为它会占用第一个和最后一个~~
之间的所有内容。添加?
会使其变得懒惰。