繁体   English   中英

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

[英]Extract specific words from text in python using regular expression

例如,我有以下文本:

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

或者 - 作为列表理解:

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

print(result)

机器人将产生

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

有关“外部”内部表达式,请参见演示,rest 是编程逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM