python – 正则表达式提取多行哈希注释
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 正则表达式提取多行哈希注释,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1930字,纯文字阅读大概需要3分钟。
内容图文
目前正在遭受作家阻止试图想出一个优雅的解决方案来解决这个问题.
请看以下示例:
{
"data": {
# Some information about field 1
# on multiple lines
"field1": "XXXXXXXXXX",
# Some more info on a single line
"field2": "XXXXXXXXXXX",
"field3": "#this would be ignored"
}
}
从上面开始,我想将代码注释作为一个整体提取出来,而不是单独提取.如果一行在另一行之后被注释,则会发生这种分组.注释将始终以空格开头,后跟#.
示例结果:
Capture group 1: Some information about field 1\n on multiple lines
Capture group 2: Some more info on a single line
我可以跨越行并在代码中进行评估,但如果可能的话,使用正则表达式会更好.如果您认为正则表达式不是解决此问题的正确方法,请说明原因.
摘要:
感谢大家为这个问题提交各种解决方案,这是SO社区有用的一个很好的例子.我将花费一个小时的时间来回答其他门票以弥补在此上花费的集体时间.
希望这个帖子将来也能帮助别人.
解决方法:
您可以将re.findall与以下正则表达式一起使用:
>>> m= re.findall(r'\s*#(.*)\s*#(.*)|#(.*)[^#]*',s,re.MULTILINE)
[(' Some information about field 1', ' on multiple lines', ''), ('', '', ' Some more info on a single line')]
对于打印,你可以这样做:
>>> for i,j in enumerate(m):
... print ('group {}:{}'.format(i," & ".join([i for i in j if i])))
...
group 0: Some information about field 1 & on multiple lines
group 1: Some more info on a single line
但作为评论的更一般方式,更多的2你可以使用itertools.groupby:
s="""{
"data": {
# Some information about field 1
# on multiple lines
# threeeeeeeeecomment
"field1": "XXXXXXXXXX"
# Some more info on a single line
"field2": "XXXXXXXXXXX",
"field3": "#this would be ignored"
}
}"""
from itertools import groupby
comments =[[i for i in j if i.strip().startswith('#')] for _,j in groupby(s.split('\n'),lambda x: x.strip().startswith('#'))]
for i,j in enumerate([m for m in comments if m],1):
l=[t.strip(' #') for t in j]
print 'group {} :{}'.format(i,' & '.join(l))
结果:
group 1 :Some information about field 1 & on multiple lines & threeeeeeeeecomment
group 2 :Some more info on a single line
内容总结
以上是互联网集市为您收集整理的python – 正则表达式提取多行哈希注释全部内容,希望文章能够帮你解决python – 正则表达式提取多行哈希注释所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。