python字典autoescapes正斜杠

时间:2013-10-03 00:41:50

标签: python regex

我有一个类,在这个类中我想存储一个包含正则表达式的变量。在这种情况下,要识别IP地址:

class Foo:
'''a class to parse through an sosreport and begin the cleaning process required in many industries'''

def __init__(self, somefile):

    self.version = '0.1'
    self.somefile = somefile
    self.network_search = {'strings':('foo','bar','foobar','barfoo',), 'regex':"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"}

不幸的是,当我从提示中调用变量时,我得到了这个:

>>> a = Foo('sosreport')
>>> a.network_search['regex']
'(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})'

有可能这样做吗?有没有更好的办法?我试过单引号和双引号,但想不出办法。

2 个答案:

答案 0 :(得分:2)

这里的混淆是在正则表达式和字符串之间 你从一个字符串构建一个正则表达式,如果你打印一个正则表达式(因为你暗中做;从技术上讲,你实际上并没有打印,但得到一个字符串表示)然后你得到一个字符串。字符串必须将反斜杠显示为转义,但正则表达式的内部表示实际上正在执行您想要的操作。

答案 1 :(得分:0)

显然它无论如何都有用......

>>> a = Foo('somefile')
>>> a.network_search['regex']
'(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})'
>>> import re
>>> string1 = 'ip addy is 192.168.1.153 so there'
>>> x=a.network_search['regex']
>>> m = re.search(x,string1)
>>> if m:
...   print your IP matches
... 
your IP matches
>>> string2 = 'no ip addy so there'
>>> n = re.search(x,string2)
>>> if n:
...   print "your IP matches"
... 
>>>