正则表达式看看IP地址背后

时间:2014-02-16 01:08:24

标签: python regex lookbehind

是否有正则表达式,它将在本文中以适当的格式读取并返回IP地址?注意它是向后的,所以正则表达式必须向后逐步执行代码然后替换'|'用'。'

这让我发疯了......我很感激你的帮助;)

摘自代码:

  

4.3 / d / C / BA “10: ”0://8.7/1/1.f“,Z: ”0://8.7/1/yx“,W:” 0://6.5 .4.3 / I / v / UT “S: ”R“,q:p,O:N,9:\ '0 \',M:[{2: ”L“,K:” 0://8.7 /1/1.f “},{2:” J”,H:{E:\ '0://6.5.4.3/d/c/ba \',\ '9 \':\ '0 \' }},{2: “克”}]}); '36,40' |类型| 187 | 20 | 207 | 31 | COM | hystorystingbulk |

期望的回报:

  

31.207.20.187

谢谢!

编辑:我有点点零碎,但我不能把它放在一起以获得理想的结果

  

(?< = / | ^) - 积极的背后隐藏

     

\ b \ d {1,3}。\ d {1,3}。\ d {1,3}。\ d {1,3} \ b - 这会让你获得ip   给定的文件/文本

     

\ b \ d {1,3} \ | \ d {1,3} \ | \ d {1,3} \ | \ d {1,3} \ b - 这会返回ip(但是   向后。记住我希望它翻转)并用'|'分隔代替   '。'

有人问....我正在使用Python并使用http://www.regexplanet.com/advanced/python/index.html THX

进行测试

2 个答案:

答案 0 :(得分:1)

可能最好的方法是将每个号码分别存储到一个组中,然后格式化并将这些组合加在一起。

一些这样的:

/(\d+)\|(\d+)\|(\d+)|(\d+)/

这会创建5个不同的匹配组,每组匹配一组父母( ),一组围绕整个匹配。但这不是Perl!现在,在Python中必须更像

match("(\\d+)\\|(\\d+)\\|(\\d+)|(\\d+)", ..)

然后,使用group获取各个匹配项并按正确顺序将它们组合在一起:

group(...) "." group(...) "." group(...) "." group(...)

多田!

免责声明:这不是真正的Pythonic语法,但应该给你一个想法。

答案 1 :(得分:0)

import re
expression = re.compile("(\d{1,3})\|(\d{1,3})\|(\d{1,3})\|(\d{1,3})")
text = """4.3/d/c/b.a",10:"0://8.7/1/1.f",z:"0://8.7/1/y.x",w:"0://6.5.4.3/i/v/u.t",s:"r",q:p,o:n,9:\'0\',m:[{2:"l",k:"0://8.7/1/1.f"},{2:"j",h:{e:\'0://6.5.4.3/d/c/b.a\',\'9\':\'0\'}},{2:"g"}]});',36,40,'|type|187|20|207|31|com|hystorystingbulk|"""

matches = expression.findall(text)

IPs = ['.'.join(reversed(match)) for match in matches]

>>> print(IPs)
['31.207.20.187']