Какой правильный Regex для этого? - PullRequest
0 голосов
/ 10 октября 2019

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

(0.2 furry
  (0.81 fast
    (0.3)
    (0.2)
  )
  (0.1 fishy
    (0.3 freshwater
      (0.01)
      (0.01)
    )
    (0.1)
  )
)

Я хочу разделить его, используя Regex.Split. Я хочу, чтобы строка [] была такой:

( 0.2 furry ( 0.81 fast ( 0.3 ) ( 0.2 ) ) ( ... (вы поймете точку)

Я использую выражение Regex ([()\\s]), но это также дает мне строкидля пространств. Не могли бы вы сказать мне правильное выражение Regex?

Ответы [ 2 ]

2 голосов
/ 10 октября 2019

Вы можете либо сопоставить (как уже ответили другие), либо разбить на пробелы и скобки:

См. Здесь регулярное выражение

Обратите внимание, что я заменилсоответствует \n для отображения по ссылке выше. Вместо этого вы должны разбить шаблон ниже.

\s+|(?<=\()(?!\s)|(?<!\s)(?=\))

Этот шаблон состоит из 3 вариантов:

  1. \s+ соответствует любому пробелу один или несколько раз
  2. (?<=\()(?!\s) Соответствует позиции, которой предшествует (, но не предшествует пробелу (поскольку первый вариант уже соответствует этой позиции)
  3. (?<!\s)(?=\)) Соответствует позиции, которая не соответствуетпредшествует пробел (потому что первый вариант уже соответствует этой позиции), но затем следует )
2 голосов
/ 10 октября 2019

Возможно, выражение, похожее на

[)(]|\d+\.\d+|\w+

, может просто работать ОК:

Тест

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"[)(]|\d+\.\d+|\w+";
        string input = @"(0.2 furry
          (0.81 fast
            (0.3)
            (0.2)
          )
          (0.1 fishy
            (0.3 freshwater
              (0.01)
              (0.01)
            )
            (0.1)
          )
        )";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}

C # Demo


Если вы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.


RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...