在python中使用方法startswith()和re.findall()提取确切的单词

时间:2019-03-16 06:57:41

标签: python python-3.x string

我有一个如下的文本文件,

&attri 'abc' real
&attri 'cde' real
&attri 'efg' {'0', '1'}
&attri 'ghi_jkl' real
&attri 'lmn' real
&attri 'nop' real
&attri 'pqr_stu_uvw' real
&attri 'xy_z' {'0', '1'}

我想从该文件中提取所有单词'abc', 'cde', 'efg', 'ghi_jkl', 'lmn', 'nop', 'pqr_stu_uvw', 'xy_z'

我编写了以下代码,但仅打印[]

import re

col = []

with open('text1.txt', 'r') as f:
    lines=f.readlines()
    for line in lines:
        l = line.strip()
        if l.startswith('&attri'):
            col.append(re.findall(r"'(.{1})'", l))
print(col)  

谢谢您的帮助。

3 个答案:

答案 0 :(得分:3)

这里不需要正则表达式,因为您始终需要从文件中提取每一行的第二个单词。使用split()并提取第二个拆分:

col = []

with open('text1.txt', 'r') as f:
    for line in f:
        if line.strip().startswith('&attri'):
            col.append(line.split()[1].strip("'"))

print(col)

答案 1 :(得分:1)

替换2行
       if l.startswith('&attri'):
            col.append(l.split()[1].strip("'"))

答案 2 :(得分:0)

尝试一下:

import re

s = '''&attri 'abc' real
&attri 'cde' real
&attri 'efg' {'0', '1'}
&attri 'ghi_jkl' real
&attri 'lmn' real
&attri 'nop' real
&attri 'pqr_stu_uvw' real
&attri 'xy_z' {'0', '1'}'''


print(re.findall("'[a-zA-Z_]*'",s)

结果:

["'abc'", "'cde'", "'efg'", "'ghi_jkl'", "'lmn'", "'nop'", "'pqr_stu_uvw'", "'xy_z'"]