如何使用.findall从一行文本中获取某些字符

时间:2017-07-24 13:08:26

标签: python regex

我在文本文件中有一行,如下所示:

0 {1.H1'} 5.82020 0.05000 0.10000 ++ {0.0} {} {2.H8} 7.61004 0.05000 0.10000 ++ {0.0} {} 0.0 100.0000 0 {} 0 0 0

我用于挑选值5.820207.61004的代码如下:

float_num = re.findall("[\s][1-9]{1}\.[0-9]+",line)

如果我想挑选单词1.H1'2.H8,我应该在代码中更改哪些内容?

此外,我的文本文件中有多行,我只选了一行作为示例。

1 个答案:

答案 0 :(得分:0)

编写一个好的正则表达式的一个重要部分是能够描述和查看实际模式。在这种情况下,您希望:

{1.H1'}

{2.H8}

没有什么比值= {blah}更好的了,所以我喜欢从我想要的字面开始:

thelist = re.findall("{2.H8}",line)

然后让它更通用,以获得我真正想要的匹配(并逃避特殊字符),如下所示:

thelist = re.findall("\{\d\.H\d\}",line)

冷却。注意你真的不需要逃避{或},但我通常会这样做,以防你最终得到一个数字,那么它将有一个特殊的意义。但是我们错过了{1.H1'}所以我们需要一个可选的'像这样:

thelist = re.findall("\{\d\.H\d'?\}",line)

然后,如果您发现自己错过了某些内容,请根据需要进行调整,以使模式更广泛。