Как разделить использование символа префикса с помощью регулярных выражений?

Для определения аутентификации в спецификации OpenAPI 2.0 используются два ключевых слова:

  • securityDefinitions
  • security

securityDefinitions описывает безопасность type (например, Basic, API-ключ и т. д.), и security применяет его ко всем или отдельным операциям. Без security, securityDefinitions не имеет никакого эффекта.

Если все операции используют базовую аутентификацию, примените security на корневом уровне:

{
  "swagger": "2.0",

  "securityDefinitions": {
    "basicAuth": {
      "type": "basic"
    }
  },
  "security": [
    {
      "basicAuth": []
    }
  ],
  ...
}

Если в конкретной операции используется базовая аутентификация, примените security к этой конкретной операции:

[111 ]

Дополнительная информация: Базовая аутентификация (OpenAPI 2.0)

5
задан António Almeida 8 February 2014 в 01:24
поделиться

3 ответа

Для Ваших требований я вижу две опции:

(1) Удалите начальный символ префикса, если существующий.

(2) Используйте полное регулярное выражение для разделения строки.

Оба проиллюстрированы в этом коде:

using System;
using System.Linq;
using System.Text.RegularExpressions;

class APP { static void Main() {

string s = "~Peter~Lois~Chris~Meg~Stewie";

// #1 - Trim+Split
Console.WriteLine ("[#1 - Trim+Split]");
string[] result = s.TrimStart('~').Split('~');
foreach (string t in result) { Console.WriteLine("'"+t+"'"); }

// #2 - Regex
Console.WriteLine ("[#2 - Regex]");
Regex RE = new Regex("~([^~]*)");
MatchCollection theMatches = RE.Matches(s);
foreach (Match match in theMatches) { Console.WriteLine("'"+match.Groups[1].Value+"'"); }

// #3 - Regex with LINQ [ modified from @ccook's code ]
Console.WriteLine ("[#3 - Regex with LINQ]");
Regex.Matches(s, "~([^~]*)")
    .OfType<Match>()
    .ToList()
    .ForEach(m => Console.WriteLine("'"+m.Groups[1].Value+"'"))
    ;
}}

Регулярное выражение в № 2 соответствует символу-разделителю, сопровождаемому группой соответствия, содержащей нуль или больше несимволов-разделителей. Результирующие соответствия являются разграниченными строками (включая любые пустые строки). Для каждого соответствия, "соответствие. Значение" является всей строкой включая ведущий разделитель и "соответствие. Groups1. Значение" является первой группой соответствия, содержащей произвольную строку разделителя.

Для полноты третье кодирование (#3) включено, показав тот же метод регулярного выражения в № 2, но в стиле кодирования LINQ.

Если Вы боретесь с регулярными выражениями, я настоятельно рекомендую Регулярные выражения Освоения, Третий Выпуск Jeffrey E. F. Friedl. Это - безусловно, лучшая помощь пониманию регулярных выражений и позже служит превосходной ссылкой или напоминанием по мере необходимости.

4
ответ дан 14 December 2019 в 13:49
поделиться

В C# это, кажется, получает то, что Вы хотите:

"~Peter~Lois~Chris~Meg~Stewie".Split("~".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
1
ответ дан 14 December 2019 в 13:49
поделиться

Вот подход LINQ...

Отметьте с RegexOptions. ExplicitCapture соответствия не включены. Без него '~' будет включен также.

using System;
using System.Linq;
using System.Text.RegularExpressions;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = "~Peter~Lois~Chris~Meg~Stewie";
            Regex.Split(s, "(~)", RegexOptions.ExplicitCapture)
                .Where(i=>!String.IsNullOrEmpty(i))
                .ToList().ForEach(i => Console.WriteLine(i));
            Console.ReadLine();
        }
    }
}
1
ответ дан 14 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: