从String中查找支持票号

时间:2014-12-23 09:36:06

标签: c# .net

我正在创建一个自定义的pop客户端,我将在其中获得一个no的主题:

  

主题:戴尔灵感的价格是多少4#1989768733736请   尽快回复

其中#1989768733736 是机票号。如何从字符串中获取no。

4 个答案:

答案 0 :(得分:4)

使用RegEx

未定义的order-no:

长度
        var str = "Dell Inspiration 4 #1989768733736";
        var regex = new Regex("#[0-9-]*");

        var match = regex.Match(str);
        Console.WriteLine(match.Value);

修改

定义的订单长度为:

        var str = "What is the Price of Dell Inspiration 4 #1989768733736 Please reply as soon as possible";
        var regex = new Regex(@"#[0-9]{13}");

        var match = regex.Match(str);
        Console.WriteLine(match.Value);

答案 1 :(得分:3)

您可以使用正则表达式匹配#字符后面的任何数字,例如#(?<ticket>\d+)仅捕获数字,或#\d+捕获前缀和数字。这将把票号捕获为命名组“票证”:

var regex = new Regex(@"#(?<ticket>\d+)");

var subject="What is the Price of Dell Inspiration 4 #1989768733736 Please reply as soon as possible";

var ticket=regex.Match(subject).Groups["ticket"].Value;

返回1989768733736

Regex的优势在于它是线程安全的,因此您可以将它放在静态字段中并从多个线程重用它,避免创建像String.Split这样的临时字符串,并且可以处理非常复杂的场景(如.在机票之后)没有打嗝。

如果未找到匹配项,则返回值将为空字符串。如果要显式检查匹配项,可以使用Match.Success属性:

var match=regex.Match(subject);
if (match.Success)
{
   var ticket = match.Groups["ticket"].Value;
   ...
}

正则表达式的性能和内存增益在高流量或高容量场景中非常重要,例如处理状态电子邮件,日志条目,系统响应,即使它们看起来更复杂也应该是首选。

答案 2 :(得分:1)

,如果您的所有号码都在#个字符之后且这些数字总是在第一个#字符之后,您可以使用一些String methods之类的; < / p>

string s = "What is the Price of Dell Inspiration 4 #1989768733736 Please reply as soon as possible";
int index = s.IndexOf("#");
s = s.Substring(index);
string number = s.Split(null)[0];
Console.WriteLine(number); // #1989768733736         

答案 3 :(得分:1)

主题:戴尔Inspiron 4的价格是多少#1989768733736请尽快回复

其中#1989768733736是票号。如何从字符串中获取no。

string str="#1989768733736";
int no;
no=convert.ToInt64(str.subtring(1,13));