如何匹配此行中#之前的所有第一个数字
26909578#Sbrntrl_7x06-lilla.avi#356028416#2012-10-24 09:06#0#http://bitshare.com/files/dvk9o1oz/Sbrntrl_7x06-lilla.avi.html#[URL=http://bitshare.com/files/dvk9o1oz/Sbrntrl_7x06-lilla.avi.html]http://bitshare.com/files/dvk9o1oz/Sbrntrl_7x06-lilla.avi.html[/URL]#<a href="http://bitshare.com/files/dvk9o1oz/Sbrntrl_7x06-lilla.avi.html">http://bitshare.com/files/dvk9o1oz/Sbrntrl_7x06-lilla.avi.html</a>#http://bitshare.com/?f=dvk9o1oz#http://bitshare.com/delete/dvk9o1oz/4511e6f3612961f961a761adcb7e40a0/Sbrntrl_7x06-lilla.avi.html
我试图得到这个号码26909578 我的尝试
string text = @"26909578#Sbrntrl_7x06-lilla.avi#356028416#2012-10-24 09:06#0#http://bitshare.com/files/dvk9o1oz/Sbrntrl_7x06-lilla.avi.html#[URL=http://bitshare.com/files/dvk9o1oz/Sbrntrl_7x06-lilla.avi.html]http://bitshare.com/files/dvk9o1oz/Sbrntrl_7x06-lilla.avi.html[/URL]#<a href=""http://bitshare.com/files/dvk9o1oz/Sbrntrl_7x06-lilla.avi.html"">http://bitshare.com/files/dvk9o1oz/Sbrntrl_7x06-lilla.avi.html</a>#http://bitshare.com/?f=dvk9o1oz#http://bitshare.com/delete/dvk9o1oz/4511e6f3612961f961a761adcb7e40a0/Sbrntrl_7x06-lilla.avi.html";
MatchCollection m1 = Regex.Matches(text, @"(.+?)#", RegexOptions.Singleline);
然后输出所有文字
答案 0 :(得分:3)
明确表示必须从字符串的开头开始:
@"^(.+?)#"
或者,如果您知道这将始终是一个数字,请将可能的字符限制为数字:
@"^\d+"
或者使用函数Match
代替Matches
。 Matches
明确地说,“给我所有的匹配”,而Match
只返回第一个。
答案 1 :(得分:1)
或者,在这样一个微不足道的案例中,您也可以考虑使用非RegEx方法。 IndexOf()
方法将找到“#”,您可以轻松地删除之前的内容。
我甚至为C#写了一个sscanf()
替代品,您可以在我的文章A sscanf() Replacement for .NET中看到。
答案 2 :(得分:1)
如果您不想/不喜欢使用正则表达式,请使用字符串构建器并循环直到您点击#。
所以喜欢这个
StringBuilder sb = new StringBuilder();
string yourdata = "yourdata";
int i = 0;
while(yourdata[i]!='#')
{
sb.Append(yourdata[i]);
i++;
}
//when you get to that # your stringbuilder will have the number you want in it so return it with .toString();
string answer = sb.toString();
答案 3 :(得分:1)
整个字符串(最终网址除外)由可以与(.+?)#
匹配的细分组成,因此您将获得多个匹配项。仅检索匹配.+?(?=#)