Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Capture contents inside curly braces

So, as part of my application, I need it to read data from a text file, and get elements between curly brackets.

e.g:

Server_1 {

    /directory1 /directory2

}

Server_2 {

    /directory1

    /directory2

}

Then something like, if Server == Server_1, print the directories.

like image 392
mtjohnson Avatar asked Dec 05 '16 11:12

mtjohnson


People also ask

What is enclosed in curly braces?

How are curly brackets used? Curly brackets are commonly used in programming languages such as C, Java, Perl, and PHP to enclose groups of statements or blocks of code.

How do you match curly brackets in regex?

To match literal curly braces, you have to escape them with \ . However, Apex Code uses \ as an escape, too, so you have to "escape the escape". You'll need to do this almost every time you want to use any sort of special characters in your regexp literally, which will happen more frequently than not.

What is the purpose of the curly brackets {} in regular expression?

The curly brackets are used to match exactly n instances of the proceeding character or pattern. For example, "/x{2}/" matches "xx".

What is the meaning of curly braces?

Definition of curly brace : either one of the marks { or } that are used as a pair around words or items that are to be considered together.


1 Answers

You can try with this:

\{(.*?)\}

Explanation

  1. \{ matches the character { literally (case sensitive)
  2. (.*?) 1st Capturing Group
  3. .*? matches any character
  4. *? Quantifier — Matches between zero and unlimited times, as few times as possible, expanding as needed (lazy)
  5. \} matches the character } literally (case sensitive)

Sample Code to extract content inside curly bracket:

 import re

regex = r"\{(.*?)\}"

test_str = ("Server_1 {\n"
    "/directory1 /directory2\n\n"
    "}\n"
    "Server_2 {\n\n"
    "/directory1\n\n"
    "/directory2\n\n"
    "}")

matches = re.finditer(regex, test_str, re.MULTILINE | re.DOTALL)

for matchNum, match in enumerate(matches):
    for groupNum in range(0, len(match.groups())):
        print (match.group(1))

Run the code here

like image 51
Rizwan M.Tuman Avatar answered Sep 28 '22 08:09

Rizwan M.Tuman