逃避角色正则表达式

时间:2015-11-13 21:10:05

标签: python

我一直在挑选我的大脑如何从以下字符串中获取2个整数:

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

我可以写正则表达式,但它逃避它会导致一些令人头疼的问题。

我需要使用哪些字符才能使其与re.match

一起使用

例如,如何将"放在以下位置:

re.match("actor_id\\")

我试过\\\\""无效。

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

4 个答案:

答案 0 :(得分:1)

您可以简单地将所有非数字视为相同:

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

这匹配但不捕获第一个数字(16),然后 抓住另外两个。插入actor_id之类的内容非常简单 如果你需要它更具体。

答案 1 :(得分:1)

您可能需要查看re.match的文档,因为它声明:

  

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

注意:BEGINNING。

您可以使用`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

答案 2 :(得分: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格式?

答案 3 :(得分:0)

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

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