2017-07-24 41 views
0

的线我有一个文本文件中的行是如下得到某些字符:如何使用.findall从文本

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,我应该在我的代码改变?

此外,我的文本文件中有多行,我只是选择了一个例子。

+0

你想选择那些具体的值还是有任何具体的格式或规则? – Qeek

+0

如果格式始终为number.Hnumber,您可以通过:“\ d \ .H \ d” – Igle

回答

0

写一个很好的正则表达式的很大一部分是能够描述和看到实际模式。在这种情况下,你想:

{1.H1'} 

{2.H8} 

有没有什么好的像值= {}嗒嗒为你抢,所以我想先用文字的东西我要去为:

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

然后使之更为通用,以获得我真正想要的比赛(和逃避特殊字符),如:

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

很酷。请注意,你并不需要逃避{或},但通常情况下,如果你最终得到一个数字,那么它会有特殊的含义。但是我们缺少{1.H1“}所以我们需要一个可选的”这样的:

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

然后,如果你发现你缺少了一些调整,你认为合适,使图更宽。

+0

谢谢!因此,如果我想添加另一个特殊字符,例如,如果我的行包含{1.H3'$},那么我会将其更改为 re.findall(“\ {\ d \ .H \ d'?\ d $?\}”,行)? – user8290579

+0

$有特殊含义,所以需要转义。 \ d表示一个数字。因此,对于{1.H3'$},您只需要这样调整:\ {\ d \ .H \ d'?\ $?\} The?意味着前一个字符是可选的。所以这个正则表达式意味着可能有一个$ – sniperd

+0

有什么“这个”正则表达式有什么资源?这是我最喜欢的一个:https://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean给一看,你会有一堆全新的工具来写这个东西:) – sniperd