2015-11-13 170 views
0

我已经捡了如何从以下字符串获得2个整数我的大脑:转义字符正则表达式

:{\"page_type\":16,\"actor_id\":100010050258799,\"story_id\":166366493708358,\"a 

我可以写正则表达式的罚款,但它的逸出,这造成了一些麻烦。

什么角色,我需要逃跑得到这个与re.match

例如工作,我该如何放置"在以下几点:

re.match("actor_id\\") 

我已经试过\\\\""无济于事。

这是一个JSON字符串,但在这种情况下,JSON解码不是一个选项,因为它在源代码中很深,不易通过遍历DOM访问。所以我坚持与正则表达式。

回答

1

你可能想看看在re.match的文件,因为它指出:

如果在字符串开头的零个或多个字符匹配正则表达式

注意:开始。

你可以改为使用`re.findall'来标记每个键到它们的int。 IE:

>>> s = ':{\"page_type\":16,\"actor_id\":100010050258799,\"story_id\":166366493708358,\"a' 
>>> re.findall('"([^"]+)":(\d+)',s) 
[('page_type', '16'), ('actor_id', '100010050258799'), ('story_id', '166366493708358')] 
>>> 
>>> d = dict(re.findall('"([^"]+)":(\d+)',s)) 
>>> d 
{'actor_id': '100010050258799', 'page_type': '16', 'story_id': '166366493708358'} 

注意模式:

"([^"]+)":(\d+) 
" #matches `"` char 
([^"]+) #matches anything EXCEPT `"` char, and captures in a group 
     ": #matches `":` chars 
      (\d+) #matches 1 or more digits and captures in a group 
0

这个没什么特别的。

>>> import re 
>>> x = ':{\"page_type\":16,\"actor_id\":100010050258799,\"story_id\":166366493708358,\"a' 
>>> re.search(
     '\\"page_type\\":([0-9]+),' 
     '\\"actor_id\\":([0-9]+)', 
     x 
    ).groups() 
('16', '100010050258799') 

我更感兴趣的是为什么JSON解码不是您的选择?你是否得到一个特殊的例外,或者这是一些psuedo-JSON格式?

1

你可以简单地把一切非数字相同:

re.match(r'[^\d]+\d+[^\d]+(\d+)[^\d]+(\d+)', thestring) 

此相匹配,但没有捕捉到第一个数字(16),然后 抓住了另外两个。如果你需要更具体的话,插入诸如actor_id 的东西很容易。

0

为什么不使用',而不是"。如果您使用单引号,则不必转义双引号字符。这对我有用:

s = ":{\"page_type\":16,\"actor_id\":100010050258799,\"story_id" 
m = re.search('actor_id":(\\d+),',s) 
print(m.group(1)) 
相关问题