Как я могу удалить строковые литералы в кавычках из строки в C #? - PullRequest
3 голосов
/ 16 декабря 2010

У меня есть строка:

Здравствуйте, "строка в кавычках" и мир "хитрых" вещей

и я хочу получить строку без кавычек обратно.Например,

Привет и мир

Есть предложения?

Ответы [ 3 ]

8 голосов
/ 16 декабря 2010
resultString = Regex.Replace(subjectString, 
    @"([""'])# Match a quote, remember which one
    (?:      # Then...
     (?!\1)  # (as long as the next character is not the same quote as before)
     .       # match any character
    )*       # any number of times
    \1       # until the corresponding closing quote
    \s*      # plus optional whitespace
    ", 
    "", RegexOptions.IgnorePatternWhitespace);

будет работать на вашем примере.

resultString = Regex.Replace(subjectString, 
    @"([""'])# Match a quote, remember which one
    (?:      # Then...
     (?!\1)  # (as long as the next character is not the same quote as before)
     \\?.    # match any escaped or unescaped character
    )*       # any number of times
    \1       # until the corresponding closing quote
    \s*      # plus optional whitespace
    ", 
    "", RegexOptions.IgnorePatternWhitespace);

также будет обрабатывать экранированные кавычки.

Таким образом, он будет правильно преобразовывать

Hello "quoted \"string\\" and 'tricky"stuff' world

в

Hello and world
1 голос
/ 16 декабря 2010

Используйте регулярное выражение, чтобы сопоставить любые строки в кавычках со строкой и заменить их пустой строкой.Используйте метод Regex.Replace() для сопоставления и замены шаблонов.

0 голосов
/ 16 декабря 2010

В случае, если вы, как и я, боитесь регулярных выражений, я собрал функциональный способ сделать это на основе вашего примера строки. Возможно, есть способ сделать код короче, но я еще не нашел его.

private static string RemoveQuotes(IEnumerable<char> input)
{
    string part = new string(input.TakeWhile(c => c != '"' && c != '\'').ToArray());
    var rest = input.SkipWhile(c => c != '"' && c != '\'');
    if(string.IsNullOrEmpty(new string(rest.ToArray())))
        return part;
    char delim = rest.First();
    var afterIgnore = rest.Skip(1).SkipWhile(c => c != delim).Skip(1);
    StringBuilder full = new StringBuilder(part);
    return full.Append(RemoveQuotes(afterIgnore)).ToString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...