我几乎编写了一个可以在GEDCOM文件上执行多项任务的程序(包含家谱信息的文件)。
我只面对一个问题;有一些这样的行:
0 @F8@ FAM
1 FAMC @F5@
1 FAMS @F5@
现在我想提取从@开始并以@。
结尾的代码我用过:
if 'FAM' in line:
var = line[1:6]
...
但是当我运行该程序时,它会输出FAMC
和FAMS
的所有行,因为这些单词中包含FAM
。
如何仅提取仅与FAM
匹配的行?谢谢。
答案 0 :(得分:1)
您可以使用正则表达式(字边界)和re.search()
:
lines = [
"0 @F8@ FAM",
"1 FAMC @F5@",
"1 FAMS @F5@"
]
for line in lines:
if re.search(r'\bFAM\b', line):
var = line
print var
“单词边界”(\b
)标记单词的开头或结尾。
我们也可以使用re.search()
同时提取家庭代码:
for line in lines:
search = re.search(r'@([A-Z0-9]+)@\s*\bFAM\b', line)
if search:
code = search.group(1)
print code
答案 1 :(得分:0)
你可以用这个:
for l in lines:
for a in l:
if(a[0]=="@" and a[-1]=="@"):
print(a)