• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 334
  • Last Modified:

How can i select some id with xx-xxx-xx-x format?

i need to change below data

A320-ZL-522-01-1(2)
A320-ZL-531-01-1(1)
A320-ZL-531-01-1(2)
A320-ZL-531-01-1(1)
A320-ZL-531-01-1(2)
TO

ZL-522-01-1
ZL-531-01-1
ZL-531-01-1
ZL-531-01-1
ZL-531-01-1
Can i do it with linq using Regex?

    public class MatchCTallyToCross
    {
        public List<string> Get(string CustomerNumber)
        {
            IEngManager engManager = new EngManager();
            EngCustomerMyCross engCustomerMyCross = new EngCustomerMyCross();
            engManager.Load(engCustomerMyCross);
            return engCustomerMyCross.myEngCustomerCross.
                Where(c => c.ENG_CUSTOMERMYCROSS_CUSTOMER_NUMBER == CustomerNumber).
                Select(c => c.ENG_CUSTOMERMYCROSS_MYTECHNIC_TASK_NO).ToList();
        }
    }

Open in new window

c => c.ENG_CUSTOMERMYCROSS_MYTECHNIC_TASK_NO result is equal to "A320-ZL-531-01-1(2)" But i need "ZL-531-01-1"
0
programmerist
Asked:
programmerist
1 Solution
 
nmarunCommented:
Here's a snippet that worked for me. I did not have to use Regex.

Arun

private static void GetFormattedString()
{
    List<string> items = new List<string>();
    items.Add("A320-ZL-522-01-1(2)");
    items.Add("A320-ZL-531-01-1(1)");
    items.Add("A320-ZL-531-01-1(2)");
    items.Add("A320-ZL-531-01-1(1)");
    items.Add("A320-ZL-531-01-1(2)");

    List<string> formattedStrings = (from item in items
                                        select item.Substring(5, 11)).ToList();

    for (int i = 0; i < formattedStrings.Count; i++)
    {
        Console.WriteLine(formattedStrings[i]);
    }
}

Open in new window

0
 
nipunuCommented:
Use Substring
string string.substring(int startIndex,int length)


private static string getFormattedString(string originalstring)
{

string formattedString = originalstring.SubString(5,11);
return formattedString;
}

0
 
programmeristAuthor Commented:
but you can not know 5. character. it can be 4. or 3. or 6. character. we consantrate on "-" character...
0
Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

 
nipunuCommented:
Then u have to use split method as well

private static string getFormattedString(string originalstring)
{

//remove the (x) part from the string
string newString = originalstring.Substring (0, sList.Length-3);

//now split it
string[] words = newString.Split('-');

string finalString = words [1] + "-"+ words [2] + "-"+ words 3] + "-"+ words [4];
return formattedString;
}
0
 
nmarunCommented:
And here's how you can do it with regex.

Arun

private static void GetFormattedString()
{
    List<string> items = new List<string>();
    items.Add("A320-ZL-522-01-1(2)");
    items.Add("A320-ZL-531-01-1(1)");
    items.Add("A320-ZL-531-01-1(2)");
    items.Add("A320-ZL-531-01-1(1)");
    items.Add("A320-ZL-531-01-1(2)");

    Regex regex = new Regex(@"[A-Za-z]{2}-\d{3}-\d{2}-\d");

    List<string> formattedStrings = (from item in items
                                        select regex.Match(item).Value).ToList();

    for (int i = 0; i < formattedStrings.Count; i++)
    {
        Console.WriteLine(formattedStrings[i]);
    }
}

Open in new window

0
 
nmarunCommented:
Below is the improvised version of the previous code. The last one would give you an empty string if the match failed. I've avoided this by adding a where condition to the LINQ statement.

Arun

private static void GetFormattedString()
{
    List<string> items = new List<string>();
    items.Add("A320-ZL-522-01-1(2)");
    items.Add("A320-ZL-531-01-1(1)");
    items.Add("A320-ZL-531-01-1(2)");
    items.Add("A320-ZL-531-01-1(1)");
    items.Add("A320-ZL-531-01-1(2)");

    Regex regex = new Regex(@"[A-Za-z]{2}-\d{3}-\d{2}-\d");

    List<string> formattedStrings = (from item in items
                                        let m = regex.Match(item)
                                        where m.Success
                                        select m.Value).ToList();

    for (int i = 0; i < formattedStrings.Count; i++)
    {
        Console.WriteLine(formattedStrings[i]);
    }
}

Open in new window

0
 
Gururaj BadamCommented:

public class MatchCTallyToCross
        {
            public List<string> Get(string CustomerNumber)
            {
                IEngManager engManager = new EngManager();
                EngCustomerMyCross engCustomerMyCross = new EngCustomerMyCross();
                engManager.Load(engCustomerMyCross);
                return engCustomerMyCross.myEngCustomerCross.
                    Where(c => c.ENG_CUSTOMERMYCROSS_CUSTOMER_NUMBER == CustomerNumber).
                    Select(c => c.ENG_CUSTOMERMYCROSS_MYTECHNIC_TASK_NO.SubString(c.ENG_CUSTOMERMYCROSS_MYTECHNIC_TASK_NO.IndexOf("-") +1)).ToList();
            }
        }

Open in new window

0
 
nmarunCommented:
Any update on this?

Arun
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now