2016-09-14 115 views
2

使用python我试图用正则表达式分块的文本文件。该文本文件是这样的:正则表达式不拆分Python

Block1 
    u 0.00 2.00 
    0.11 2.11 
Block2 
    v 0.00 2.01 
    0.01 2.11 
Block3 
    a 1.01 2.02 
    0.01 2.11 

我的正则表达式

re.split("(\bBlock1\b\n\s\s[u].*\n.*)", open('Blockfile.txt', "r").read()) 

然而,当我运行的代码不会分裂。 在这里看到我的正则表达式代码:https://regex101.com/r/jW7oP4/2

谢谢!

+1

向我们展示整个程序,包括输出,并解释如何输出不同于你想要的。发布一行代码并告诉我们“这行不通”并不足以满足我们的需求。 –

+0

这个[regex](https://regex101.com/r/jW7oP4/3)可以帮忙吗? –

回答

0

你不一定需要正则表达式,可以通过行线接近它检查是否符合Block收集成果转化的字典开始:

from collections import defaultdict 

data = defaultdict(list) 
with open("input.txt") as f: 
    for line in f: 
     if line.startswith("Block"): 
      key = line.strip() 
     else: 
      data[key].append(line.strip()) 

print(dict(data)) 

打印:

{ 
    'Block3': ['a 1.01 2.02', '0.01 2.11'], 
    'Block2': ['v 0.00 2.01', '0.01 2.11'], 
    'Block1': ['u 0.00 2.00', '0.11 2.11'] 
} 
+0

谢谢! 我在这一整天,所以我只是忘了,也有更简单的方法来这个技巧。 – Jobias

0

始终,总是在Python中使用正则表达式时使用原始字符串。 \b意味着在一个字符串内反斜杠,它会被评估,你的正则表达式会被损坏。只需在字符串前添加一个'r'即可。 这将这样的伎俩:

re.split(r"(\bBlock1\b\n\s\s[u].*\n.*)", open('Blockfile.txt', "r").read()) 
+0

感谢您的帮助!我确实忘了添加“r”,但它似乎还不好。但我认为@alecxe解释它的方式也应该如此! – Jobias

0

Split仅分割在其讲话住该参数,例如:

拆分“此字符串”.split(" ")结果:

["this","string"] 

但用.split("s ")分割结果于:

["thi", "string"] 

不是:

["thi", "tring"] 

哪个是你的问题。您的代码只会一次性得到(\bBlock1\b\n\s\s[u].*\n.*)

我建议使用多个分割函数或不同的函数,如translate

+0

感谢您的回答! 如果你看看我的正则表达式的例子,你可以看到它是一回事!或者你的意思是别的吗? – Jobias