Regex получить текст между скобками и ключевыми словами
У меня есть текстовый образец как это;
(((a) or (b) or (c)) and ((d) or (e)) and ((!f) or (!g)))
и я хочу получить это так;
((a) or (b) or (c))
((d) or (e))
((!f) or (!g))
После этого я хочу разделить их вот так;
a,b,c
d,e
!f,!g
любая помощь будет потрясающей:)
редактировать 1: извините за отсутствующие части; я использую язык C# и это то, что я получил;
(\([^\(\)]+\))|([^\(\)]+)
с я получил;
(a) or (b) or (c) and (d) or (e) and (!f) or (!g)
уже спасибо!
2 ответа
Решение
Взяв это предыдущее регулярное выражение и немного изменив код...
string msg= "(((a) or (b) or (c)) and ((d) or (e)) and ((!f) or (!g)))";
var charSetOccurences = new Regex(@"\(((?:[^()]|(?<o>\()|(?<-o>\)))+(?(o)(?!)))\)");
var charSetMatches = charSetOccurences.Matches(msg);
foreach (Match mainMatch in charSetMatches)
{
var sets = charSetOccurences.Matches(mainMatch.Groups[1].Value);
foreach (Match match in sets)
{
Console.WriteLine(match.Groups[0].Value);
}
}
Первое регулярное выражение используется, чтобы получить содержимое самой внешней пары.
Затем то же самое регулярное выражение используется для получения отдельных наборов внутри "большего" контента. Вы получаете это как вывод:
((a) or (b) or (c))
((d) or (e))
((!f) or (!g))
Если вы хотите удалить внешние символы, просто измените внутреннюю строку:
Console.WriteLine(match.Groups[0].Value);
в
Console.WriteLine(match.Groups[1].Value);
Получить:
(a) or (b) or (c)
(d) or (e)
(!f) or (!g)
Я надеюсь, что вы можете взять это отсюда.
После моей работы я понимаю это;
string msg = "(((a) or (b) or (c)) and ((d) or (e)) and ((!f) or (!g)))";
Regex regex = null;
MatchCollection matchCollection = null;
regex = new Regex(@"(\([^\(\)]+\))|([^\(\)]+)"); // For outer parantheses
matchCollection = regex.Matches(query);
foreach (Match match in matchCollection)
{
MatchCollection subMatchCollection = Regex.Matches(match.Value, @"(""[^""]+"")|([^\s\(\)]+)"); // For value of inner parantheses
foreach (Match subMatch in subMatchCollection)
{
//with 2 loops i got each elements of this type of string.
}
}
Спасибо всем!:)