0

我曾经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
4

2 回答 2

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')])
于 2013-04-17T17:37:10.067 回答
0

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

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

添加了一个示例。

于 2013-04-17T20:15:47.637 回答