用正则表达式拆分字符串

时间:2013-12-05 04:14:09

标签: c# regex

我有一个字符串列表,如下所示:

List<string> list = new List<string>;
list.add("AAPL7131221P00590000");
list.add("AAPL7131206C00595000");
list.add("AAPL7131213P00600000");

我想删除AAPL7与下一个字母CP之间的日期,然后将其添加到新列表中。如何使用正则表达式获取:131221131206131212以便我可以填充新列表?

4 个答案:

答案 0 :(得分:3)

请考虑以下代码段...

string startPattern = "AAPL7"; // GOOGL, GOOG, etc
List<string> newlist = list
    .Select(n => Regex.Match(n, string.Format(@"(?<=^{0})\d+", startPattern)).Value)
    .ToList();

答案 1 :(得分:3)

您不需要正则表达式,只需使用Substring,假设您的所有输入都是相同的字符数。

var startingString = "AAPL7"; // holds whatever the starting string is
var input = "AAPL7131221P00590000";

var outputDate = input.Substring(startingString.Length, 6);

所以,如果你想把它作为制作集合的单行代码:

List<string> allDates = yourInputValues
    .Select(x => x.Substring(startingString.Length, 6))
    .ToList();

答案 2 :(得分:0)

        //Regex regex = new Regex("(\\w{5})(\\d*)(\\w*)");
        Regex regex = new Regex("(\\w*)(\\d{6})([PC])(\\d*)");
        List<string> list = new List<string>();
        list.Add("AAPL7131221P00590000");
        list.Add("AAPL7131206C00595000");
        list.Add("AAPL7131213P00600000");
        List<string> extracted = new List<string>();
        foreach (string item in list)
        {
            extracted.Add(regex.Split(item)[2]);
        }

这是你想要的吗?

答案 3 :(得分:0)

我只是添加了一些可能有用的东西,如果你有不同的日期长度(即2014年1月31日的14131)

string startpart = "AAPL7"; // or whatever
string mainstring = "AAPL714231P00590000"; // or any other input

mainstring = mainstring.Substring(startpart.Length); //this will through away startpart

int index;
if (mainstring.IndexOf("P") >= 0) index = mainstring.IndexOf("P"); //if there is no "P" it gives -1
else index = mainstring.IndexOf("C");

string date = mainstring.Substring(0,index);

我认为处理更广泛的案件是一种安全的方法