Som*_*ter 1 python string parsing list python-2.7
我有这样的清单
["<name:john student male age=23 subject=\computer\sience_{20092973}>",
"<name:Ahn professor female age=61 subject=\computer\math_{20092931}>"]
Run Code Online (Sandbox Code Playgroud)
我想让学生使用{20092973},{20092931}.
所以我想分成这样的列表
我的期望结果1是这个(输入是{20092973})
"student"
Run Code Online (Sandbox Code Playgroud)
我的期望结果2是这个(输入是{20092931})
"professor"
Run Code Online (Sandbox Code Playgroud)
我已经在搜索...但我找不到..抱歉..
我怎么能这样?
我认为你不应该首先这样做.与您的玩具示例不同,您的真实问题不涉及某种笨重格式的字符串; 它涉及一个Scapy NetworkInterface
对象.哪个属性可以直接访问.您只需要解析它,因为由于某种原因您存储了它的字符串表示形式.就是不要那样做; 将它们作为属性存储时实际存储的属性.
NetworkInterface
文档中没有描述该对象(因为它是Windows特定代码的实现细节),但您可以像Python中的任何其他类一样以交互方式检查它(例如,dir(ni)
将显示所有属性),或者只是查看来源.你想要的价值是name
和win_name
.所以,不要print ni
只做类似的事情print '%s,%s' % (ni.name, ni.win_name)
.然后,在一些其他程序中解析结果将是微不足道的,而不是颈部疼痛.
或者,更好的是,如果你在Scapy本身实际使用它,只需直接制作dict {ni.win_name: ni.name for ni in nis}
.(或者,如果你在Python 2.5或其他东西上运行Scapy,.dict((ni.win_name, ni.name) for ni in nis)
)
但是要回答你提出的问题(也许你已经捕获了所有的数据,而且捕获新数据为时已晚,所以现在我们仍然无法解决你早先的错误......),有三个步骤:(1)弄清楚如何将其中一个字符串解析为其组成部分.(2)在循环中执行此操作以构建将数字映射到名称的dict.(3)只需使用dict进行查找.
对于解析,我使用正则表达式.例如:
<name:\S+\s(\S+).*?\{(\d+)\}>
Run Code Online (Sandbox Code Playgroud)
现在,让我们构建一个dict:
r = re.compile(r'<name:\S+\s(\S+).*?\{(\d+)\}>')
matches = (r.match(thing) for thing in things)
d = {match.group(2): match.group(1) for match in matches}
Run Code Online (Sandbox Code Playgroud)
现在:
>>> d['20092973']
'student'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
52 次 |
最近记录: |