Шаблон регулярного выражения для игнорирования внутренней круглой скобки во входной строке

#c# #.net #regex

Вопрос:

Я изо всех сил пытался найти решение для следующих требований

Входной строки сумма(спец(«любой текст1» : «любой текст2»),спекуляция(«любой текст3» : «любой надпись4»)) я хочу, чтобы соответствовать строку спецификаций(«любой текст1» : «любой текст2») и спецификаций(«любой текст3» : «любой надпись4»))

шаблон, который я попробовал, это Spec(([^)]*))
введите описание изображения здесь

Этот шаблон работает для ввода выше , но если какой-либо из любых текстов1 ,любой текст2, любой текст3 и любой текст4 содержат круглые скобки, то он не соответствует

ex сумма ввода(Спецификация(«любой текст1 с (скобкой)» : «любой текст2»),спецификация(«любой текст3» : «любой текст4»))

введите описание изображения здесь

Также возможно, что текст также может содержать кавычки "chassis "4"" .

Комментарии:

1. bSpec((?>[^()] |(?<c>)(|(?<-c>)))*(?(c)(?!)))

2. Если у вас может быть бродячий ( или ) внутри "..." , вам понадобится более конкретное решение, хотя. Но нам понадобится больше деталей, например, возможно ли что " -то промежуточное "..." .

3. Это работает на вас?

4. да, возможно, что текст также может содержать кавычки "chassis "4""

5. Я понимаю «да» как «между ними могут быть скобки "..." «.

Ответ №1:

Вы можете использовать

 (?is)bSpec((?>"[^"\]*(?:\.[^"\]*)*"|[^()]|(?<c>)(|(?<-c>)))*(?(c)(?!)))
 

Смотрите «[^»\]*(?:\.[^»\]*)*»|[^()]|(?)(|(?)))*(?(c)(?!)))amp;i=Sum(Spec(«any text1» : «any text2»),spec(«any text3» : «any text4»))
Sum(Spec(«any (text1 with («bracket»)» : «any text2»),spec(«any text3» : «any text4″))
amp;o=is» rel=»nofollow noreferrer»>демонстрационную версию регулярных
выражений .NET.

Подробные сведения:

  • (?is) — модификатор без учета регистра
  • b — граница слов
  • Spec( Spec( текст
  • (?> — начало атомной группы:
    • "[^"\]*(?:\.[^"\]*)*" "..." строка, которая может содержать экранированные " символы
    • | — или
    • [^()] — любой другой символ, кроме ( и )
    • | — или
    • (?<c>)( ( символ сопоставляется, и пустое значение перемещается в c стек группы
    • | — или
    • (?<-c>)) ) символ сопоставляется, и пустое значение выводится из стека групп c
  • )* — конец атомной группы, повторите ноль или более раз
  • (?(c)(?!)) — условная конструкция: если групповой c стек не пуст, произойдет сбой, вызовет возврат
  • ) ) шар.