Python字符串转换

Sci*_*c40 1 python regex string

这是我通过解析文件中的数据创建的字符串:

723|NM|1|7201|QQ|1|72034|PP|1|72034N|AA|1|7203466|QW|1|72000|NM|1|7201111|NM|1
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想要这个输出:

723|NM|1
7201|QQ|1
72034|PP|1
72034N|AA|1
7203466|QW|1
72000|NM|1
7201111|NM|1
Run Code Online (Sandbox Code Playgroud)

因为我没有成功解析数据并动态附加它(我是python的新手)我明白我可以通过转换这个字符串获得相同的所需输出.

我研究,测试,卡住了.

基本上我需要用新行代替分隔符的每个第3个实例(或者,也许是任何人都可以建议的更好的东西).

任何帮助是极大的赞赏!

谢谢

Jea*_*bre 5

没有正则表达式:

像这样:

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)] ))
Run Code Online (Sandbox Code Playgroud)

请注意,[]外部内部join是故意的,以获得更好的性能(在Python中没有[]的列表理解)(即使我同意它很丑:))

结果:

723|NM|1
7201|QQ|1
72034|PP|1
72034N|AA|1
7203466|QW|1
72000|NM|1
7201111|NM|1
Run Code Online (Sandbox Code Playgroud)

BTW与正则表达式也很简单:

re.sub("(.*?\|.*?\|.*?)\|","\\1\n",s)
Run Code Online (Sandbox Code Playgroud)

但如果物品的数量不能完全分割为3(这可以做到,但是以更复杂的方式),它就不能很好地工作

  • `[]`是故意的,以获得更好的性能:/sf/ask/634245741/ (2认同)