使用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
谢谢!
答案 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
。