【发布时间】:2011-04-18 01:33:35
【问题描述】:
如何确定字符串开头的数字(任意位数)?
一些可能的字符串:
1123|http://example.com
2|daas
应该返回 1123 和 2。
【问题讨论】:
标签: c# parsing html-parsing
如何确定字符串开头的数字(任意位数)?
一些可能的字符串:
1123|http://example.com
2|daas
应该返回 1123 和 2。
【问题讨论】:
标签: c# parsing html-parsing
使用正则表达式:
using System.Text.RegularExpressions;
str = "35|http:\/\/v10.lscache3.c.youtube.com\/videoplayback...";
Regex r = new Regex(@"^[0-9]{1,2}");
Match m = r.Match(str);
if(m.Success) {
Console.WriteLine("Matched: " + m.Value);
} else {
Console.WriteLine("No match");
}
将捕获字符串开头的 1-2 位数字。
【讨论】:
\d 代替 [0-9] 并且外部的 () 不是必要的我认为
m.Value,您实际上并没有引用捕获组。为此,您将使用m.Groups[1].Value。由于此正则表达式从字符串的开头开始,除了数字之外不匹配任何内容,您可以省略 () 并使用 m.Value。
您可以使用 LINQ:
string s = "35|...";
int result = int.Parse(new string(s.TakeWhile(char.IsDigit).ToArray()));
或者(如果数字后面总是跟|)很好的字符串操作:
string s = "35|...";
int result = int.Parse(s.Substring(0, s.IndexOf('|')));
【讨论】:
s.Split(new char[] {'|'}, 2)。它返回一个数组,第一个包含您的数字作为字符串,您可以int.Parse,第二个包含字符串的其余部分,其中删除了数字
如果您知道该数字始终为 2 位数字:
string str = "35|http:\/\/v10.lscache3.c.youtube.com\/videoplayback?...";
int result;
if (!int.TryParse(str.Substring(0, 2), out result)) {
int.TryParse(str.Substring(0, 1), out result)
}
// use the number
如果您不确定数字有多长,请查看 dtb 的 .indexOf() 方法。如果您需要更复杂的东西,请考虑使用正则表达式。
【讨论】:
您可以获取前两个字符并转换为int。
var s = "a35|...";
short result = 0;
bool isNum = Int16.TryParse(s.Substring(0, 2), out result);
【讨论】: