web-dev-qa-db-ja.com

PYTHON-中括弧内のコンテンツをキャプチャします

したがって、アプリケーションの一部として、テキストファイルからデータを読み取り、中括弧で囲まれた要素を取得する必要があります。

例えば:

Server_1 {

/ directory1/directory2

}

Server_2 {

/ directory1

/ directory2

}

次に、Server == Server_1の場合、ディレクトリを出力します。

敬具、

マイケル

7
mtjohnson

あなたはこれで試すことができます:

_\{(.*?)\}
_

説明

  1. \{ matches the character { literally (case sensitive)
  2. _(.*?) 1st Capturing Group_
  3. _.*?_は任意の文字に一致します
  4. _*?_ Quantifier —ゼロから無制限の時間に一致し、可能な限り少ない回数で、必要に応じて拡張します(遅延)
  5. _\}_は文字_}_と文字通り一致します(大文字と小文字が区別されます)

中括弧内のコンテンツを抽出するためのサンプルコード:

_ 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))
_

ここでコードを実行

16
Rizwan M.Tuman

サーバー名も抽出する場合は、次の方法で試すことができます。

fullConfig = """
Server_1 {
  /directory1 /directory2
}

Server_2  {
  /directory1
  /directory2
}
"""

# OUTPUT
# ('Server_1', '/directory1 /directory2\n')
# ('Server_2', '/directory1\n  /directory2\n')
regex = r'(\w+)\s*[^{]*{\s*([^}]+)\s*}'
for serverName, serverConfig in re.findall(regex, fullConfig):
  print(serverName, serverConfig)
0
th30z