Regex to filter word with suffix from string

I’m currently working on a .NET 4.6.2 application.

I need to write a regex to filter certain files.

The filename must not include the word "house" as well as the file suffix png, jpg, or gif.

So far I came up with this regex:

Regex regex = new Regex(@"\b\w*house\w*\b.+.(jpg|png|gif)$");

It seems to work fine with the following words:

  • zt_housedsaf-34.png
  • housedsaf-34.gif

But it doesn’t filter these words i.e.:

  • house.gif
  • 123house.png

Do you know how to write a regex to solve this issue?

>Solution :

The pattern does not match the last 2 strings because .+ matches 1 or more characters and the . after it also matches a character.

So after matching house there should be 2 of any characters after it, and then match any of the alternatives jpg png gif.

Depending on the allowed characters, you could match 0 or more characters followed by escaping the dot to match it literally.

If you don’t need to capture the suffix, you can wrap the alternatives in a non capture group:

\b\w*house\w*\b.*\.(?:jpg|png|gif)$

Regex demo

Or you could narrow down the allowed characters matching only word chars and a hyphen and start the pattern matching word chars without a word boundary:

\w*house[\w-]*\.(?:jpg|png|gif)$

Regex demo

Leave a Reply