我正在创建一个自定义的pop客户端,我将在其中获得一个no的主题:
主题:戴尔灵感的价格是多少4#1989768733736请 尽快回复
其中#1989768733736 是机票号。如何从字符串中获取no。
答案 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));