这是我通过解析文件中的数据创建的字符串:
723|NM|1|7201|QQ|1|72034|PP|1|72034N|AA|1|7203466|QW|1|72000|NM|1|7201111|NM|1
理想情况下我想要这样的输出:
723|NM|1
7201|QQ|1
72034|PP|1
72034N|AA|1
7203466|QW|1
72000|NM|1
7201111|NM|1
由于我没有成功解析数据并动态附加它(我是 python 的新手),我知道我可以通过转换这个字符串来获得相同的期望输出。
我研究、测试并卡住了。
基本上我需要用一个新行替换分隔符的每个第 3 个实例(或者,也许任何人都可以建议的更好的东西)。
非常感谢任何帮助!
谢谢
最佳答案
没有正则表达式:
- 根据
|
拆分 - 然后按 3 个项目分组(这是经典的:How can you split a list every x elements and add those x amount of elements to an new list?)并用
|
加入,按换行符加入每个组
像这样:
s = "723|NM|1|7201|QQ|1|72034|PP|1|72034N|AA|1|7203466|QW|1|72000|NM|1|7201111|NM|1"
items = s.split("|")
print("\n".join(["|".join(items[i:i+3]) for i in range(0,len(items),3)] ))
请注意,外部 join
中的 []
是有目的的,以获得更好的性能 ( List comprehension without [ ] in Python )(即使我同意它很丑 :))
结果:
723|NM|1
7201|QQ|1
72034|PP|1
72034N|AA|1
7203466|QW|1
72000|NM|1
7201111|NM|1
顺便说一句,使用正则表达式也很简单:
re.sub("(.*?\|.*?\|.*?)\|","\\1\n",s)
但是如果项目的数量不能完全被 3 整除(这可以做到,但是以更复杂的方式)
关于Python 字符串转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47956457/