匹配#符号前的第一个数字

时间:2012-10-31 18:40:13

标签: c# regex

如何匹配此行中#之前的所有第一个数字

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);

然后输出所有文字

4 个答案:

答案 0 :(得分:3)

明确表示必须从字符串的开头开始:

@"^(.+?)#"

或者,如果您知道这将始终是一个数字,请将可能的字符限制为数字:

@"^\d+"

或者使用函数Match代替MatchesMatches明确地说,“给我所有的匹配”,而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)

整个字符串(最终网址除外)由可以与(.+?)#匹配的细分组成,因此您将获得多个匹配项。仅检索匹配.+?(?=#)

返回的集合中的第一个匹配项