转义字符正则表达式
问题描述:
我已经捡了如何从以下字符串获得2个整数我的大脑:转义字符正则表达式
:{\"page_type\":16,\"actor_id\":100010050258799,\"story_id\":166366493708358,\"a
我可以写正则表达式的罚款,但它的逸出,这造成了一些麻烦。
什么角色,我需要逃跑得到这个与re.match
例如工作,我该如何放置"
在以下几点:
re.match("actor_id\\")
我已经试过\\\\""
无济于事。
这是一个JSON字符串,但在这种情况下,JSON解码不是一个选项,因为它在源代码中很深,不易通过遍历DOM访问。所以我坚持与正则表达式。
答
你可能想看看在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
答
这个没什么特别的。
>>> 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格式?
答
你可以简单地把一切非数字相同:
re.match(r'[^\d]+\d+[^\d]+(\d+)[^\d]+(\d+)', thestring)
此相匹配,但没有捕捉到第一个数字(16
),然后 抓住了另外两个。如果你需要更具体的话,插入诸如actor_id
的东西很容易。
答
为什么不使用'
,而不是"
。如果您使用单引号,则不必转义双引号字符。这对我有用:
s = ":{\"page_type\":16,\"actor_id\":100010050258799,\"story_id"
m = re.search('actor_id":(\\d+),',s)
print(m.group(1))