If I have a string like b开发者_如何学Goelow... what is the regular expression to remove the (optional) leading and trailing double quotes? For extra credit, can it also remove any optional white space outside of the quotes:
string input = "\"quoted string\"" -> quoted string
string inputWithWhiteSpace = " \"quoted string\" " => quoted string
(for C# using Regex.Replace)
It's overkill to use Regex.Replace
for this. Use Trim
instead.
string output = input.Trim(' ', '\t', '\n', '\v', '\f', '\r', '"');
And if you only want to remove whitespace that's outside the quotes, retaining any that's inside:
string output = input.Trim().Trim('"');
Besides using a regular expression you can just use String.Trim()
- much easier to read, understand, and maintain.
var result = input.Trim('"', ' ', '\t');
Replace ^\s*"?|"?\s*$
with an empty string.
In C#, the regex would be:
string input = " \"quoted string\" "l
string pattern = @"^\s*""?|""?\s*$";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, "");
Console.WriteLine(result);
I would use String.Trim method instead, but if you want regex, use this one:
@"^(\s|")+|(\s|")+$"
I created a slightly modified version of another pattern that works pretty well for me. I hope this helps for separating normal command-line parameters and double-quoted sets of words that act as a single parameter.
String pattern = "(\"[^\"]*\"|[^\"\\s]+)(\\s+|$)";
My 2c, as I couldn't find what I was looking for. This verion removes the first pair of quotes and spaces on each side of them.
public static string RemoveQuotes(string text)
{
var regex = new Regex(@"^\s*\""\s*(.*?)\s*\""\s*$");
var match = regex.Match(text);
if (match.Success && match.Groups.Count == 2)
{
return match.Groups[1].Value;
}
return text;
}
精彩评论