我是regex的新手。我试图使用python的正则表达式在文件中找到一行,并提取由制表位分隔的所有后续单词。我的行看起来像这样。
#position 4450 4452 4455 4465 4476 4496 D110 D111 D112 D114 D116 D118 D23 D24 D27 D29 D30 D56 D59 D69 D85 D88 D90 D91 JW1 JW10 JW15 JW22 JW28 JW3 JW35 JW39 JW43 JW45 JW47 JW49 JW5 JW52 JW54 JW56 JW57 JW59 JW66 JW7 JW70 JW75 JW77 JW9 REF_OR74A
我已经确定这个表达的基础涉及积极的外观。
(?<=#position).*
我不希望这会通过tabstop分隔匹配。但是,它确实在文件中找到了我的行:
import re
file = open('src.txt','r')
f = list(file)
file.close()
pattern = '(?<=#position).*'
regex = re.compile(pattern)
regex.findall(''.join(f))
['\t4450\t4452\t4455\t4465\t4476\t4496\tD110\tD111\tD112\tD114\tD116\tD118\tD23\tD24\tD27\tD29\tD30\tD56\tD59\tD69\tD85\tD88\tD90\tD91\tJW1\tJW10\tJW15\tJW22\tJW28\tJW3\tJW35\tJW39\tJW43\tJW45\tJW47\tJW49\tJW5\tJW52\tJW54\tJW56\tJW57\tJW59\tJW66\tJW7\tJW70\tJW75\tJW77\tJW9\tREF_OR74A']
使用一些kludge和list slicing / string方法,我可以操纵它并获取我的数据。我真正想做的是找到这些条目的列表。正则表达式会是什么样的呢?
答案 0 :(得分:3)
你需要使用正则表达式吗?列表切片和字符串方法看起来并不像你说的那么多。
类似的东西:
f = open('src.txt','r')
for line in f:
if line.startswith("#position"):
l = line.split() # with no arguments it splits on all whitespace characters
l = l[1:] # get rid of the "#position" tag
break
并从那里进一步操纵?