Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式从python文本中提取特定单词_Python_Python 3.x_Regex - Fatal编程技术网

使用正则表达式从python文本中提取特定单词

使用正则表达式从python文本中提取特定单词,python,python-3.x,regex,Python,Python 3.x,Regex,例如,我有以下文本: [ABC]something foo 25 bar 20 [DEF]something foo 50 …和其他类似的文本 我想从括号中提取三个单词,foo和bar以及数字,这样我就可以得到re.findall的结果 [('ABC','foo 25','bar 20'),('DEF','foo 50')] 我尝试了以下模式,但在列表中返回了许多空字符串 \[(\w+)\]|\n\s+(\w+\s\d+) 你可以用 import re data

例如,我有以下文本:

[ABC]something
    foo 25
    bar 20

[DEF]something
    foo 50
…和其他类似的文本

我想从括号中提取三个单词,foo和bar以及数字,这样我就可以得到re.findall的结果
[('ABC','foo 25','bar 20'),('DEF','foo 50')]

我尝试了以下模式,但在列表中返回了许多空字符串

\[(\w+)\]|\n\s+(\w+\s\d+)
你可以用

import re

data = """
[ABC]something
    foo 25
    bar 20

[DEF]something
    foo 50
"""

rx_outer = re.compile(r'''
    ^
    \[(?P<section>[^][]+)\]
    (?P<content>(?:.+[\r\n]?)+)
    ''', re.M | re.X)

rx_inner = re.compile(r'\w+\s+\d+')

result = []
for outer in rx_outer.finditer(data):
    section = outer.group('section')
    values = tuple([value.group(0) for value in rx_inner.finditer(outer.group('content'))])
    result.append((section,) + values)

print(result)
机器人会屈服的

[('ABC', 'foo 25', 'bar 20'), ('DEF', 'foo 50')]

有关和表达式,请参见演示,其余部分是编程逻辑。

使用两个表达式或一个解析器。谢谢,但这复制了“ABC”。。我希望它是‘ABC’、‘foo 25’、‘bar 20’@user13711798:啊,请稍等。谢谢。成功了。但这对我来说似乎更先进。我希望直接从re.findall那里得到结果。同时,我将努力学习这一点。也很抱歉,它不会让我投票:(。
[('ABC', 'foo 25', 'bar 20'), ('DEF', 'foo 50')]