正面看后面,\ t切片单词直到\ n

时间:2016-11-30 21:47:29

标签: python regex

我是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方法,我可以操纵它并获取我的数据。我真正想做的是找到这些条目的列表。正则表达式会是什么样的呢?

1 个答案:

答案 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

并从那里进一步操纵?