正则表达式不可拆分

2024-05-13 18:47:09 发布

您现在位置: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

谢谢!!你知道吗


Tags: 代码httpsretxtcomreadopensplit
3条回答

Split仅对带有语音标记的参数进行拆分,例如:

.split(" ")拆分“这个字符串”,结果是:

["this","string"] 

但是用.split("s ")拆分它会导致:

["thi", "string"]

而不是:

["thi", "tring"]

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

我建议使用多个分割函数或一个不同的函数,如translate。你知道吗

您不一定需要正则表达式,如果一行以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']
}

在Python中处理正则表达式时,总是使用原始字符串。\b表示字符串中的反斜杠,它会被计算,正则表达式也会被破坏。只需在字符串前面加一个“r”。 这将达到以下目的:

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

相关问题 更多 >