这是我通过解析文件中的数据创建的字符串:
abranch
理想情况下,我想要这个输出:
723|NM|1|7201|QQ|1|72034|PP|1|72034N|AA|1|7203466|QW|1|72000|NM|1|7201111|NM|1
由于我没有成功解析数据并动态附加它(我是python的新手)我明白通过转换这个字符串我可以获得相同的所需输出。
我研究,测试过,并且卡住了。
基本上我需要用新行代替分隔符的每个第3个实例(或者,也许是任何人都可以建议的更好的东西)。
非常感谢任何帮助!
由于
答案 0 :(得分: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)] ))
请注意外部[]
内的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
用正则表达式BTW也很简单:
re.sub("(.*?\|.*?\|.*?)\|","\\1\n",s)
但是如果物品的数量不能完全分为3(这可以做到,但是以更复杂的方式),它就不能很好地工作了
答案 1 :(得分:0)
使用正则表达式解决方案:
import re
string = """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|123|NM"""
rx = re.compile(r'(?:[^|]+\|?){1,3}')
for line in string.split("\n"):
parts = "\n".join([part.group(0).rstrip("|") for part in rx.finditer(line)])
print(parts)
这会产生:
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
123|NM
答案 2 :(得分:0)
您可以使用正则表达式并尝试此模式:
import re
pattern=r'\d+\w\|\w+\|\d'
with open('file.txt','r') as f:
for line in f:
match=re.findall(pattern,line)
for i in match:
print(i)
输出:
723|NM|1
7201|QQ|1
72034|PP|1
72034N|AA|1
7203466|QW|1
72000|NM|1
7201111|NM|1
只为了一行的乐趣:
import re
pattern=r'\d+\w\|\w+\|\d'
for i in [re.findall(pattern,line) for line in open('file.txt','r')][0]:
print(i)
输出:
723|NM|1
7201|QQ|1
72034|PP|1
72034N|AA|1
7203466|QW|1
72000|NM|1
7201111|NM|1