Chinaunix
标题:
[正则]借人气求一个python正则
[打印本页]
作者:
ghostvic
时间:
2014-10-19 21:50
标题:
[正则]借人气求一个python正则
要用Python从一个很长的串中提取一些字串(它们都以/jobs?viewJob=&jobId=开始,以%3Aprimary结束),
多谢了,各位
作者:
李满满
时间:
2014-10-19 22:06
学生党:飘过~请楼主给详细点儿的文本方便测试~谢谢嗯
作者:
zooyo
时间:
2014-10-19 22:20
提示:
作者被禁止或删除 内容自动屏蔽
作者:
yinyuemi
时间:
2014-10-19 22:29
re.findall((?<=right_text)(.*)?(?=left_text)),whole_text)
作者:
ghostvic
时间:
2014-10-19 22:47
回复
2#
李满满
:{"lix_header_lowercase":"control","EndorseDialogJS"unsaveJobUrl":"/job/consumer/savedItems/unsaveJobAjax?jobId=11339728&csrfToken=ajax%3A6032962507117593044&trk=vsrp_jobs_res_sec_act&trkInfo=VSRPsearchId%3A3779929881413714367824%2CVSRPtargetId%3A11339728%2CVSRPcmpt%3Aprimary"}]},"primaryAction":"view","saveJobUrl":"/job/consumer/savedItems/saveJobAjax?jobId=11339728&csrfToken=ajax%3A6032962507117593044&trk=vsrp_jobs_res_pri_act&trkInfo=VSRPsearchId%3A3779929881413714367824%2CVSRPtargetId%3A11339728%2CVSRPcmpt%3Aprimary","link_vie</script><script type="text/javascript">fs.embed("voltron_srp_main","
多谢了
作者:
ghostvic
时间:
2014-10-19 22:50
回复
5#
ghostvic
好像没有目标数据...
看这个:
:{"lix_header_lowercase":"control","EndorseDialogJS":photo":"/jobs?viewJob=&jobId=11307997&trk=vsrp_jobs_res_photo&trkInfo=VSRPsearchId%3A3779929881413714367824%2CVSRPtargetId%3A11307997%2CVSRPcmpt%3Aprimary","fmt_job_recency":"3 days ago","postedDate":1413414469000,"companyLogoId":"/p/2/000/294/05d/0b9c5b8.png","companyId":406315,"fmt_postedDate":"Oct 15, 2014","link_biz_overview_5":"/company/406315?trk=vsrp_jobs_res_name&trkInfo=VSRPsearchId%3A3779929881413714367824%2CVSRPtargetId%3A11307997%2CVSRPcmpt%3Aprimary","link_viewJob":"/jobs?viewJob=&jobId=11307997&trk=vsrp_jobs_res_name&trkInfo=VSRPsearchId%3A3779929881413714367824%2CVSRPtargetId%3A11307997%2CVSRPcmpt%3Aprimary","isApplied":false,"id":11307997,"link_voltron_job_search_5":"/vsearch/j?rsid=3779929881413714367824&pivotType=sim&pid=11307997&trk=vsrp_jobs_res_sim&trkInfo=VSRPsearchId%3A37799298</script><script type="text/javascript">fs.embed("voltron_srp_main","
作者:
ghostvic
时间:
2014-10-20 10:01
回复
4#
yinyuemi
我试了下,不知道为啥不行,我啥地方写错了么?
foundURL = re.findall(r'(?<=/jobs?viewJob)(.*)?(?=%3Aprimary)',data)
谢谢
作者:
ghostvic
时间:
2014-10-20 10:44
ghostvic 发表于 2014-10-20 10:01
回复 4# yinyuemi
自己搞出来了,
foundURL = re.findall(r'\/jobs\?viewJob.*?%3Aprimary',data)
但是用(?<=right_text)(.*)?(?=left_text) 总报错
作者:
欧阳西风
时间:
2014-10-20 11:01
本帖最后由 欧阳西风 于 2014-10-20 11:06 编辑
回复
7#
ghostvic
这个可以 将第二个?使用反斜线转义,把第三个?放到括号里面 foundURL = re.findall(r'(?<=/jobs
\
?viewJob)(.*
?
)(?=%3Aprimary)',data)
另外 这个正则匹配到的字符串是不包含/jobs?viewJob以及%3Aprimary头尾的,只会获得头尾之间的字符串。
作者:
圣西罗门柱
时间:
2014-10-20 11:23
re.findall(r'\/jobs\?viewJob=(.*)%3Aprimary',url)
复制代码
作者:
ghostvic
时间:
2014-10-20 13:27
回复
9#
欧阳西风
多谢西风, 有一点不明白, r'(?<=/jobs\?viewJob)(.*?)(?=%3Aprimary)' 已经用了 r'', 为什么viewJob前的?还需要“\”转义? r'' 里面不应该是默认解释为它原来的意思么?
作者:
欧阳西风
时间:
2014-10-20 16:41
回复
11#
ghostvic
用r的作用是说 不要求python当作一般字符串来解析正则表达式,而是将整个字符串里面的内容原样作为正则表达式来使用, 但是此处你应该匹配的是"?",而在正则表达式中"?"是一个元字符,所以应该加反斜线来转义。
之前的那个假设不用r来写的话,应该是这样的:
foundURL = re.findall("(?<=/jobs
\\
?viewJob)(.*?)(?=%3Aprimary)", data)
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2