我有以下字符串格式:
session=11;reserID=1000001
如何获取数字的字符串数组?
我的代码:
var value = "session=11;reserID=1000001";
var numbers = Regex.Split(value, @"^\d+");
答案 0 :(得分:2)
你可能在正确的轨道上但却忘记了角色类:
Regex.Split(value, @"[^\d]+");
您也可以使用相同的\D+
缩短编写时间。
但是,您在返回的数组的开头会得到一个空元素,因此在使用结果时要小心。遗憾的是,Regex.Split()没有一个删除空元素的选项(String.Split
会这样做)。解决问题的方法不是很好:
Regex.Replace(value, @"[^\d;]", "").Split(';');
基于分号实际上是您要分割的相关部分的假设。
快速PowerShell测试:
PS> 'session=11;reserID=1000001' -replace '[^\d;]+' -split ';'
11
1000001
另一种选择是跳过元素:
Regex.Split(...).Skip(1).ToArray();
答案 1 :(得分:1)
Regex
.Matches("session=11;reserID=1000001", @"\d+") //match all digit groupings
.Cast<Match>() //promote IEnumerable to IEnumerable<Match> so we can use Linq
.Select(m => m.Value) //for each Match, select its (string) Value
.ToArray() //convert to array, as per question
答案 2 :(得分:0)
.Net内置功能而不使用RegEx.Try System.Web.HttpUtility.ParseQueryString
,传递字符串。您需要引用System.Web
程序集,但不应该需要Web上下文。
var value = "session=11;reserID=1000001";
NameValueCollection numbers =
System.Web.HttpUtility.ParseQueryString(value.Replace(";","&"));
答案 3 :(得分:0)
var numbers = Regex.Split(value, @".*?(.\d+).*?");
或 返回每个数字:
var numbers = Regex.Split(value, @".*?(\d).*?");
答案 4 :(得分:0)
我将从另一个问题重新使用我的代码:
private void button1_Click(object sender, EventArgs e)
{
string sauce = htm.Text; //htm = textbox
Regex myRegex = new Regex(@"[0-9]+(?:\.[0-9]*)?", RegexOptions.Compiled);
foreach (Match iMatch in myRegex.Matches(sauce))
{
txt.AppendText(Environment.NewLine + iMatch.Value);//txt= textbox
}
}
如果你想玩正则表达式这是一个很好的网站:http://gskinner.com/RegExr/ 他们还有一个桌面应用程序:http://gskinner.com/RegExr/desktop/ - 它使用adobe air,所以先安装它。