0

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

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

4 回答 4

3

明确说明它必须从字符串的开头开始:

@"^(.+?)#"

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

@"^\d+"

或者使用该函数Match代替Matches. Matches明确地说,“给我所有的比赛”,而Match只会返回第一个。

于 2012-10-31T18:45:51.020 回答
1

或者,在像这样的微不足道的情况下,您也可以考虑使用非 RegEx 方法。该IndexOf()方法将找到“#”,您可以轻松地剥离之前的内容。

我什至为 C# 编写了一个sscanf()替代品,您可以在我的文章A sscanf() Replacement for .NET中看到它。

于 2012-10-31T18:47:46.573 回答
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();
于 2012-10-31T18:50:42.133 回答
1

整个字符串(最终 url 除外)由可以匹配的段组成(.+?)#,因此您将获得多个匹配项。仅从匹配返回的集合中检索第一个匹配项.+?(?=#)

于 2012-10-31T18:51:12.740 回答