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
  1. 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