Определение условия разделения для строки, которая будет проанализирована в словаре - PullRequest
0 голосов
/ 27 июня 2018

Кажется, у меня есть некоторые проблемы с определением условия разделения для строки. Условие должно использоваться для сопоставления строки со словарем.

В предыдущем посте

У меня была похожая проблема, но решение, данное там, могло бы работать для этого конкретного случая, но не является твердым решением.

Это не будет работать для текста, подобного этому:

da:,en:H a full-bodied, vinous  wine, which attracts wine connoisseurs with its well-balanced and lively bouquet. It combines crisp  with a rich taste and long-lasting finish. Wines from one single vintage form the basis of this exceptional  wine. som – sparkling since 1856,fr:,nl:,ru:

Так как текст внутри языкового тега имеет запятые и после этого не может выбрать :.

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

1 Ответ

0 голосов
/ 27 июня 2018

Я предлагаю использовать регулярные выражения ; при условии, что

  1. Язык состоит из двух (маленьких) букв, за которыми следует столбец: ru:, en:
  2. Запятая , является разделителем: en: bla-bla-bla,ru: bla-bla-bla

Можно поставить

using System.Text.RegularExpressions;

...

string source = @"da:,en: H a full - bodied, vinous wine, which attracts wine connoisseurs with its well-balanced and lively bouquet.It combines crisp with a rich taste and long-lasting finish.Wines from one single vintage form the basis of this exceptional wine. som – sparkling since 1856,fr:,nl:,ru:";

Dictionary<string, string> result = Regex
  .Matches(source, @"(?<lang>[a-z]{2}:)(?<value>.*?)(?=\,[a-z]{2}:|$)")
  .OfType<Match>()
  .ToDictionary(match => match.Groups["lang"].Value.TrimEnd(':'),
                match => match.Groups["value"].Value);

Console.WriteLine(string.Join(Environment.NewLine, result
  .Select(pair => $"language: {pair.Key}; text: {pair.Value}")));

Результат:

language: da; text: 
language: en; text:  H a full - bodied, vinous wine, which attracts wine connoisseurs with its well-balanced and lively bouquet.It combines crisp with a rich taste and long-lasting finish.Wines from one single vintage form the basis of this exceptional wine. som – sparkling since 1856
language: fr; text: 
language: nl; text: 
language: ru; text: 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...