amiref
amiref

Reputation: 3441

Regular Expression for removing suffix

What is the regular expression for removing the suffix of file names? For example, if I have a file name in a string such as "vnb.txt", what is the regular expression to remove ".txt"? Thanks.

Upvotes: 0

Views: 2722

Answers (4)

leetNightshade
leetNightshade

Reputation: 2829

Do you really need a regular expression to do this? Why not just look for the last period in the string, and trim the string up to that point? Frankly, there's a lot of overhead for a regular expression, and I don't think you need it in this case.

As suggested by tstenner, you can try one of the following, depending on what kinds of strings you're using:

std::strrchr

std::string::find_last_of

First example:

char* str = "Directory/file.txt";

size_t index;
char* pStr = strrchr(str,'.');
if(nullptr != pStr)
{
    index = pStr - str;
}

Second example:

int index = string("Directory/file.txt").find_last_of('.');

Upvotes: 5

tstenner
tstenner

Reputation: 10311

If you're looking for a solution that will give you anything except for the suffix, you should use string::find_last_of.

Your code could look like this:


const std::string removesuffix(const std::string& s) {
  size_t suffixbegin = s.find_last_of('.');

  //This will handle cases like "directory.foo/bar"
  size_t dir = s.find_last_of('/');
  if(dir != std::string::npos && dir > suffixbegin) return s;
  if(suffixbegin == std::string::npos) return s;
  else return s.substr(0,suffixbegin);
}

If you're looking for a regular expression, use \.[^.]+$.
You have to escape the first ., otherwise it will match any character, and put a $ at the end, so it will only match at the end of a string.

Upvotes: 2

Caleb Huitt - cjhuitt
Caleb Huitt - cjhuitt

Reputation: 14941

If you are using Qt already, you could use QFileInfo, and use the baseName() function to get just the name (if one exists), or the suffix() function to get the extension (if one exists).

Upvotes: 3

Different operating systems may allow different characters in filenams, the simplest regex might be (.+)\.txt$. Get the first capture group to get the filename sans extension.

Upvotes: 1

Related Questions