捕获大括号内的内容

Posted

技术标签:

【中文标题】捕获大括号内的内容【英文标题】:Capture contents inside curly braces 【发布时间】:2017-04-19 18:15:13 【问题描述】:

因此,作为我的应用程序的一部分,我需要它从文本文件中读取数据,并获取大括号之间的元素。

例如:

Server_1 

    /directory1 /directory2



Server_2 

    /directory1

    /directory2


然后类似,如果Server == Server_1,打印目录。

【问题讨论】:

【参考方案1】:

你可以试试这个:

\(.*?)\

Explanation

    \ matches the character literally (case sensitive) (.*?) 1st Capturing Group .*? 匹配任意字符 *? Quantifier — 匹配零次到无限次,尽可能少,根据需要扩展(惰性) \ 匹配字符 字面意思(区分大小写)

提取大括号内内容的示例代码:

 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

【讨论】:

【参考方案2】:

如果你还想提取服务器名称,可以试试这个:

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)

【讨论】:

以上是关于捕获大括号内的内容的主要内容,如果未能解决你的问题,请参考以下文章

php替换大括号内的文字

查找大括号内的文本并替换包括大括号的文本

Java流程控制

正则表达式捕获第一个和最后一个括号内的所有内容[重复]

linux 帮助 里面 [] 中括号 大括号 啥意思,语法是怎么样的啊

scala map 后加小括号和大括号的区别