user7157732
user7157732

Reputation: 347

Regex format returns empty result - C#

I have below text line and I intend to extract the "date" after the ",", i,e, 1 Sep 2015

Allocation/bundle report 10835.0000 Days report step 228, 1 Sep 2015

I wrote the below regex code and it returns empty in the match.

`Regex regexdate = new Regex(@"\Allocation/bundle\s+\report\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\,\+(\S)+\s+(\S)+\s+(\S)");  // to get dates

MatchCollection matchesdate = regexdate.Matches(text);

Can you advice about what's wrong with the Regex format that I mentioned?

Upvotes: 5

Views: 86

Answers (2)

Noppadet
Noppadet

Reputation: 804

Can you do it without Regex? Here's an example using a bit of help from LINQ.

var text = "Allocation/bundle report 10835.0000 Days report step 228, 1 Sep 2015";

var sDate = text.Split(',').Last().Trim();

if (string.IsNullOrEmpty(sDate))
{
    Console.WriteLine("No date found.");
}
else
{
    Console.WriteLine(sDate); // Returns "1 Sep 2015"
}

Upvotes: 5

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 626804

The \A is an anchor asserting the start of string. You must have meant A. (\S)+ must be turned into (\S+). Also, \r is a carriage return matching pattern, again remove the backslash to turn \r into r.

Use

@"Allocation/bundle\s+report\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\,\s+(\S+)\s+(\S+)\s+(\S+)"

See the regex demo

enter image description here

Note that the last part of the regex may be made a bit more specific to match 1+ digits, then some letters and then 4 digits: (\S+)\s+(\S+)\s+(\S+) -> (\d+)\s+(\p{L}+)\s+(\d{4})

Upvotes: 5

Related Questions