正则表达式不会拆分Python

时间:2016-09-14 14:35:20

标签: python regex

使用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

谢谢!

3 个答案:

答案 0 :(得分: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']
}

答案 1 :(得分:0)

总是,始终在Python中使用正则表达式时使用原始字符串。 \b表示字符串中的反斜杠,它会被评估并且正则表达式会被损坏。只需添加一个' r'在弦前。 这样就可以了:

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

答案 2 :(得分:0)

Split仅使用其语音标记分割参数,例如:

分割"此字符串" .split(" ")会导致:

["this","string"] 

但是将其与.split("s ")分开会导致:

["thi", "string"]

而不是:

["thi", "tring"]

这是你的问题。您的代码只有在一次性获得(\bBlock1\b\n\s\s[u].*\n.*)时才会拆分!

我建议使用多个拆分功能或不同的功能,如translate