在python中使用re.findall输出一组参数而不是每行的一组参数

时间:2013-04-17 17:32:55

标签: python for-loop findall

我已经使用readlines来分割文件中的所有句子,我想使用re.findall来查找其中的大写字母。但是,我能得到的唯一输出是所有句子的一组大写,但我想为文件中的每个句子设置一组大写字母。

我现在正在使用for循环尝试此操作,但我不确定这是否是执行此任务的最佳操作。

输入:

Line 01: HE went to the SHOP
Line 02: THE SHOP HE went

这是我作为输出得到的:

[HE, SHOP, THE]

我希望得到输出:

[HE, SHOP], [THE, SHOP, HE]

有没有办法做到这一点?我把编码放在下面的一分钟。谢谢!

import re, sys

f = open('findallEX.txt', 'r')

lines = f.readlines()

ii=0

for l in lines:
    sys.stdout.write('line %s: %s' %(ii, l))
    ii = ii + 1

for x in l
    re.findall('[A-Z]+', l)
print x

2 个答案:

答案 0 :(得分:2)

我认为这样做的方法如下:

txt = """HE went to the SHOP
THE SHOP HE went"""

result = []
for s in txt.split('\n'):
    result += [re.findall(r'[A-Z]+', s)]

print(result) # prints [['HE', 'SHOP'], ['THE', 'SHOP', 'HE']] 

或使用列表推导(稍微不那么可读):

txt = """HE went to the SHOP
    THE SHOP HE went"""

print([re.findall(r'[A-Z]+', s) for s in txt.split('\n')])

答案 1 :(得分:0)

如果您的数据真的是那种形式(单词完全大写),您甚至不需要正则表达式。你需要isupper

with open('findallEX.txt') as f:
    for line in f.readlines():
        print [word for word in line.split() if word.isupper()]

添加了一个示例。