我正在寻找一种方法来搜索字符串,以便在C#中的一组字符之前搜索所有内容。例如,如果这是我的字符串值:
这是一个测试.... 12345
我希望在" 12345"之前构建一个包含所有字符的新字符串。 所以我的新字符串将等于"这是一个测试...." 有没有办法做到这一点?
我找到了正则表达式示例,您可以将注意力集中在一个字符上,而不是一系列字符上。
答案 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();
}
}