Solved

Create key and pair

Posted on 2011-09-28
6
179 Views
Last Modified: 2012-05-12
Hello, I have a string list.
GO-1212a	GO-1212b	GO-1213a	GO-1213b	GO-1214a	GO-1214b	GO-1215a	GO-1215b	GO-1216a	GO-1216b	GO-1217a	GO-1217b	GO-1218a	GO-1218b	GO-1219a	GO-1219b	GO-1220a	GO-1220b	GO-1221a	GO-1221b	GO-1222a	GO-1222b	GO-1223a	GO-1223b	GO-1224a	GO-1224b	GO-1225a	GO-1225b	GO-1226a	GO-1226b	GO-1227a	GO-1227b	NA 7029a	NA 7029b	No DNAa	No DNAb

Open in new window


I want to use regular expression to create the pairs
GO-1212a	GO-1212b
GO-1213a	GO-1213b
GO-1214a	GO-1214b
GO-1215a	GO-1215b
GO-1216a	GO-1216b
GO-1217a	GO-1217b
GO-1218a	GO-1218b
GO-1219a	GO-1219b
GO-1220a	GO-1220b
GO-1221a	GO-1221b
GO-1222a	GO-1222b
GO-1223a	GO-1223b
GO-1224a	GO-1224b
GO-1225a	GO-1225b
GO-1226a	GO-1226b
GO-1227a	GO-1227b
NA 7029a	NA 7029b
No DNAa	No DNAb

Open in new window

I used to use a per-processing data such as remote the prefix, but I am not satisfied it.Thanks
0
Comment
Question by:zhshqzyc
  • 3
  • 2
6 Comments
 
LVL 74

Expert Comment

by:käµfm³d 👽
ID: 36717748
Like this?

string source = "GO-1212a	GO-1212b	GO-1213a	GO-1213b	GO-1214a	GO-1214b	GO-1215a	GO-1215b	GO-1216a	GO-1216b	GO-1217a	GO-1217b	GO-1218a	GO-1218b	GO-1219a	GO-1219b	GO-1220a	GO-1220b	GO-1221a	GO-1221b	GO-1222a	GO-1222b	GO-1223a	GO-1223b	GO-1224a	GO-1224b	GO-1225a	GO-1225b	GO-1226a	GO-1226b	GO-1227a	GO-1227b	NA 7029a	NA 7029b	No DNAa	No DNAb";
string result = System.Text.RegularExpressions.Regex.Replace(source, @"(\w{2}[- ]\w+\s+\w{2}[- ]\w+)\s+", "$1\n");

Open in new window

0
 
LVL 28

Expert Comment

by:strickdd
ID: 36717749
This may not be exact because of fringe cases, but should be close for you:

[A-Za-z0-9\-]*a\t{1}[A-Za-z0-9\-]*b\t
0
 

Author Comment

by:zhshqzyc
ID: 36718597
I am sorry. It is a list of strings. I want to create a key for each pair then get each index of string in the array. How to modify the code below?
List<string> list1 = new List<string>();
list1.Add("GO-1212a");
list1.Add("GO-1212b");
....
Dictionary<string, List<int>> categorized = new Dictionary<string, List<int>>();
string[] header1 = list1.ToArray();
                for (int i = 0; i < header1.Length; i++)
                {
                    string key = header1[i].Substring(); //here need some work
                    System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(key, "^\\w{2}[- ]\\w+\\s+\\w{2}[- ]\\w+)\\s+"); //here also need work
                    if (m.Success)
                    {
                        if (!categorized.ContainsKey(m.Value))
                        {
                            categorized.Add(m.Value, new List<int>());
                        }

                        categorized[m.Value].Add(i);
                    }

                }

Open in new window

0
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 74

Expert Comment

by:käµfm³d 👽
ID: 36719796
I don't understand where the regular expression part is supposed to come into play. Can you elaborate?
0
 

Author Comment

by:zhshqzyc
ID: 36719847
It is a long story.
Actually I want to create a dictionary, the results like

key:
GO-1012
Value:{0,1}

key:
GO-1013
Value: {2,3}

...
key:
NA 7029
Value:
{n,n+1} something like.
0
 
LVL 74

Accepted Solution

by:
käµfm³d   👽 earned 500 total points
ID: 36719977
I'm not sure if I fully understand the requirement, but I'll take a stab at it  = )

See if this is what you're after:
List<string> list1 = new List<string>()
{
    "GO-1212a", "GO-1212b", "GO-1213a", "GO-1213b", "GO-1214a", "GO-1214b",
    "GO-1215a", "GO-1215b", "GO-1216a", "GO-1216b", "GO-1217a", "GO-1217b",
    "GO-1218a", "GO-1218b", "GO-1219a", "GO-1219b", "GO-1220a", "GO-1220b",
    "GO-1221a", "GO-1221b", "GO-1222a", "GO-1222b", "GO-1223a", "GO-1223b",
    "GO-1224a", "GO-1224b", "GO-1225a", "GO-1225b", "GO-1226a", "GO-1226b",
    "GO-1227a", "GO-1227b", "NA 7029a", "NA 7029b", "No DNAa", "No DNAb"
};

Dictionary<string, List<int>> categorized = new Dictionary<string, List<int>>();

for (int i = 0; i < list1.Count; i++)
{
    string key = list1[i].Substring(0, list1[i].Length - 1);

    if (!categorized.ContainsKey(key))
    {
        categorized.Add(key, new List<int>());
    }

    categorized[key].Add(i);
}

Open in new window

0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

As most anyone who uses or has come across them can attest to, regular expressions (regex) are a complicated bit of magic. Packed so succinctly within their cryptic syntax lies a great deal of power. It's not the "take over the world" kind of power,…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now