Scott Chamberlain
Scott Chamberlain

Reputation: 127603

Help with a regex expression

I am trying to get the word after Sysdba. out of a string. Here is a example where my result would be PRODUCTION

CAST(CASE WHEN SYSDBA.PRODUCTION.SHIPPING_COMPLETE_DATE IS NOT NULL THEN 1 ELSE 0 END AS bit) AS [Shiping Completed]]

I created the regex expression

Regex CatagoryRegex = new Regex(@"SYSDBA\.(.#)\.", RegexOptions.IgnoreCase | RegexOptions.Compiled);

however when I call var tmp = CatagoryRegex.Match(SelectText); I get no matches. I know I am most likely making a simple mistake but I can not spot it.

Upvotes: 0

Views: 70

Answers (2)

Peter Boughton
Peter Boughton

Reputation: 112240

Your specific problem is that .# will match "any character", followed by # character.

The simplest fix might be to use .+ but this is a bit crude for what you appear to be doing. A step better is the non-greedy .+? which will only capture upto the next . (unless it has to go further), but I would probably go a step further than this even...

To prevent . inside the captured group, try this expression:

"SYSDBA\.([^.]+)\."

Where [^.] is any character not a . (no need to escape in character classes), and the + means "one or more".

If you want to potentially allow . inside your captured group, you could use:

"SYSDBA\.(\S+)\."

Where the \S is any non-whitespace character (so stops matching if spaces or newlines).

Upvotes: 2

Sjoerd
Sjoerd

Reputation: 75689

You probably mean .* instead of .#.

Upvotes: 0

Related Questions