У меня есть строка вроде:
"super exemple of string key : text I want to keep - end of my string"
Я хочу просто сохранить строку между "key : "
и " - "
. Как я могу это сделать? Должен ли я использовать регулярное выражение или я могу сделать это по-другому?
substring
andindexof
Ответы:
Возможно, хороший способ - просто вырезать подстроку :
источник
или с помощью только строковых операций
источник
Вы можете сделать это без регулярного выражения
источник
В зависимости от того, насколько надежной / гибкой вы хотите, чтобы ваша реализация была, на самом деле это может быть немного сложно. Вот реализация, которую я использую:
источник
InvariantCulture
не работает с универсальными приложениями Windows. Есть ли способ удалить его с сохранением функциональности вашего класса? @ChaseMedallionВот как я могу это сделать
источник
Думаю, это работает:
источник
Регулярное выражение здесь излишне.
Вы можете использовать
string.Split
с перегрузкой, которая принимает в качествеstring[]
разделителей, но это также было бы излишним.Посмотрите на
Substring
иIndexOf
- первое, чтобы получить части данной строки, индекс и длину, а второе - для поиска индексированных внутренних строк / символов.источник
string.Split
.Рабочее решение LINQ:
источник
источник
Поскольку
:
и-
уникальны, вы можете использовать:источник
или с регулярным выражением.
с работающим примером .
Вы можете решить, если это перебор.
или
как недостаточно проверенный метод расширения
источник
Это возвращает только значения между "key:" и следующим появлением "-"
источник
Вы можете использовать метод расширения ниже:
Использование:
источник
Я использовал фрагмент кода от Виджая Сингха Раны, который в основном выполняет эту работу. Но это вызывает проблемы, если
firstString
файл уже содержитlastString
. Я хотел извлечь access_token из ответа JSON (парсер JSON не загружен). МойfirstString
был\"access_token\": \"
и мойlastString
был\"
. Я закончил с небольшой модификациейисточник
Если вы ищете однострочное решение, вот оно:
Полное однострочное решение с
System.Linq
:источник
У вас уже есть хорошие ответы, и я понимаю, что код, который я предоставляю, далеко не самый эффективный и чистый. Однако я подумал, что это может быть полезно в образовательных целях. Мы можем использовать готовые классы и библиотеки в течение всего дня. Но не понимая внутренней работы, мы просто имитируем и повторяем и никогда ничему не научимся. Этот код работает и является более простым или "девственным", чем некоторые другие:
В итоге вы получите желаемую строку, назначенную переменной parsedString. Имейте в виду, что он также захватит исходящие и предыдущие пробелы. Помните, что строка - это просто массив символов, которыми можно управлять, как другими массивами с индексами и т. Д.
Береги себя.
источник
Если вы хотите обрабатывать несколько вхождений пар подстрок, без RegEx будет нелегко:
Если порядок и количество вхождений подстрок не имеет значения, можно использовать этот быстрый и грязный вариант:
По крайней мере, он позволяет избежать большинства исключений, возвращая исходную строку, если ни одна / одна подстрока не совпадают.
источник
Как я всегда говорю, нет ничего невозможного:
Надеюсь, что я помог.
источник
Что-то вроде этого возможно
источник
Когда вопросы формулируются в терминах единственного примера, неизбежно присутствует двусмысленность. Этот вопрос не исключение.
Для примера, приведенного в вопросе, желаемая строка ясна:
Однако эта строка является всего лишь примером строк и граничных строк, для которых необходимо идентифицировать определенные подстроки. Я буду рассматривать общую строку с общими граничными строками, представленную следующим образом.
PP
- это предыдущая строка ,FF
это следующая строка, а шляпы для вечеринок указывают, какие подстроки должны быть сопоставлены. (В примере, приведенном в вопросе,key :
это предшествующая строка и-
следующая строка.) Я предположил, чтоPP
иFF
предшествуют и следуют границы слова (так чтоPPA
иFF8
не совпадают).Мои предположения, отраженные партийными шляпами, следующие:
PP
может предшествовать один (или несколько)FF
подстрок, которые, если они есть, игнорируются;PP
за ним следует один или несколькоPP
s, прежде чемFF
встретится, следующееPP
s являются частью подстроки между предыдущей и следующей строками;PP
следует один или болееFF
секунд до того,PP
является столкновение, первыйFF
следующийPP
считается следующая строка.Обратите внимание, что многие ответы здесь относятся только к строкам формы
или
Можно использовать регулярное выражение, конструкции кода или их комбинацию для идентификации интересующих подстрок. Я не делаю суждений относительно того, какой подход лучше. Я представлю только следующее регулярное выражение, которое будет соответствовать интересующим подстрокам.
Запустите двигатель! 1
Я тестировал это с помощью механизма регулярных выражений PCRE (PHP), но, поскольку регулярное выражение вовсе не экзотично, я уверен, что оно будет работать с механизмом регулярных выражений .NET (который очень надежен).
Механизм регулярных выражений выполняет следующие операции:
Этот метод сопоставления одного символа за раз, следующего за предыдущей строкой, до тех пор, пока за символом не
F
будет следоватьF
(или, в более общем смысле, символ представляет собой строку, составляющую следующую строку), называется Tempered Greedy Token Solution .Естественно, что регулярное выражение должно быть изменено (если возможно), если предположения, которые я изложил выше, будут изменены.
1. Переместите курсор для получения подробных объяснений.
источник
В C # 8.0 и выше вы можете использовать оператор диапазона,
..
как вПодробности смотрите в документации .
источник
источник