gpt4 book ai didi

python - 如何在模式匹配之前使用正则表达式将字符串拆分为多行

转载 作者:行者123 更新时间:2023-12-05 07:03:48 25 4
gpt4 key购买 nike

我有一个包含以下格式的 swift 数据的文件,需要使用 python 中的正则表达式将其拆分为多行。原始文件:

ID        Information

1 :20:Test1 :25:test2:28C:test3

期望的输出:

ID  Information

1 :20:Test1
1 :25:test2
1 :28C:test3

使用 Notepad++,我可以使用 将“信息”列分成多行

查找: ^:[0-9]{2}:|\s:[0-9]{2}:|\s:[0-9]{2 }[A-Za-z]{1}:

替换: \n$0

需要使用 python 复制相同的内容。到目前为止,我尝试了下面的代码,但结果不包含该模式。模式匹配后 split :

import re

s = ':20:Test1 :25:test2:28C:test3'

l = re.compile('^:[0-9]{2}:|\s:[0-9]{2}:|\s:[0-9]{2}[A-Za-z]{1}:').split(s)

结果: ['', 'Test1', 'test2', 'test3']

结果还应包含拆分字符串时的正则表达式模式。

最佳答案

你可以使用

import re
text = """ID Information

1 :20:Test1 :25:test2:28C:test3"""

valid_line_rx = r'^(\d+\s*)(:\d{2}[A-Za-z]?:.*)'
print( re.sub(valid_line_rx, lambda m:
"\n".join(["{}{}".format(m.group(1),x) for x in re.split(r'(?!^)(?=:\d{2}[A-Za-z]?:)', m.group(2))]),
text,
flags=re.M)
)

参见 Python demo ,输出:

ID        Information

1 :20:Test1
1 :25:test2
1 :28C:test3

^(\d+\s*)(:\d{2}[A-Za-z]?:.*)正则表达式匹配

  • ^ - 一行的开始(由于 re.M 标志)
  • (\d+\s*) - 第 1 组:一个或多个数字,然后是 0 个或多个空格
  • (:\d{2}[A-Za-z]?:.*) - 第 2 组::,两位数字,一个可选字母和一个 a : 然后是除换行符之外的任何 0 个或多个字符。

(?!^)(?=:\d{2}[A-Za-z]?:) 正则表达式匹配不是字符串开头的位置并紧跟其后带有 :、2 位数字、一个可选字母和一个 :,此模式用于拆分上述正则表达式匹配的第 2 组值。

关于python - 如何在模式匹配之前使用正则表达式将字符串拆分为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63119292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com