python正则表达式re.match,

  python正则表达式re.match,

  re模块提供了许多有用的函数来匹配字符串。下面文章主要介绍Python正则表达式re.compile()和re.findall()的相关信息,通过示例代码详细介绍。有需要的可以参考一下。

  00-1010前言网页中的代码:提取方法:参数re的含义。关于查找所有:参考:摘要

  

目录

  使用爬虫从网页中提取一些信息时,采用两种方法:re.compile()和re.findall()。目的是截取并打印网页中的“某某城市土地规划表”。

  

前言

   tab-details 某某城市土地规划表/span

  

网页中的代码:

  定义解析响应(html):

  pattern=re.compile( class=\ tab-details \ (。*?)/span ,re。s)

  items=re.findall(模式,html)

  打印(项目)

  退货项目

  结果:

  [某某城市土地规划表]

  这里主要解释一下pattern,re.compile()和re.findall()的定义和用法:

  1.pattern:pattern属性指定用于验证输入字段的正则表达式。

  2.关于。COMPILE():COMPILE()方法用于在脚本执行期间编译正则表达式。它还可以用于更改和重新编译正则表达式。

  例如:在字符串中全局搜索 man 并用 person 替换。然后通过compile()方法,更改正则表达式,用 person 替换 man 或 woman ,

  脚本类型=文本/javascript

  世界上的每一个男人!地球上的每个女人!

  patt=/man/g;

  str2=str.replace(patt, person );

  //将人替换为人

  document . write(str 2 br/);

  patt=/(wo)?man/g;

  patt.compile(模式);

  str2=str.replace(patt, person );

  //用person替换man或woman

  document . write(str2);

  /脚本

  输出:(可以看到第一行的man换成了person,出现了woperson。第二行的男女也换成了人,只有人,没有其他奇怪的字符串)

  世界上的每个人!地球上的每个女人!

  世界上的每个人!地球上的每个人!

  3.re.findall():嗯,这是最难的一个,主要是解释一下(。*?)

  re.findall()函数返回与模式匹配的某种形式(如string)的所有字符串,返回形式为数组。

  下面是findall()函数的两种表示,(上面的代码是第二个):

  进口re

  kk=re.compile(r\d )

  kk . find all( one 1 two 2 three 344 )

  #[1,2,3,4]

  #注意这里findall()的用法,可以传递两个参数;

  kk=re.compile(r\d )

  re.findall(kk, one123 )

  #[1,2,3]

  以下是常见的正则表达式:

  进口re

  str=aabbabaabbaa

  # 一个"."就是匹配除 \n (换行符)以外的任意一个字符

  print(re.findall(ra.b,str))#[aab, aab]

  # *前面的字符出现0次或以上

  print(re.findall(ra*b,str))#[aab, b, ab, aab, b]

  # 贪婪,匹配从.*前面为开始到后面为结束的所有内容

  print(re.findall(ra.*b,str))#[aabbabaabb]

  # 非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取

  print(re.findall(ra.*?b,str))#[aab, ab, aab]

  # 非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容

  print(re.findall(ra(.*?)b,str))#[a, , a]

  str = aabbab

   aabbaa

   bb #后面多加了2个b

  # 没有把最后一个换行的aab算进来

  print(re.findall(ra.*?b,str))#[aab, ab, aab]

  # re.S不会对\n进行中断

  print(re.findall(ra.*?b,str,re.S))#[aab, ab, aab, aa\n b]

  

  注意'.*?'是对它的前后部分作为开始结束部分进行截取,而'(.*?)'也是把其前后作为开始结束,但是只截取括号部分,不包含开始结束部分!!!(同时在对前后部分的选择时要注意特征明确点,就是与众不同的的嘛,防止截取出的是其他部分啊)

  

  

re.findall中参数re.S的意义:

  1.字符串变为(后面多加了2个b)

  

str = aabbab

   aabbaa

   bb

  

  2.参数无re.S,没有把最后一个换行的aab算进来

  

print(re.findall(ra.*?b,str))

  #[aab, ab, aab]

  

  3.参数有re.S,不会对\n进行中断

  

print(re.findall(ra.*?b,str,re.S))

  #[aab, ab, aab, aa\n b]

  

  在我们一开始的代码中就有re.s,因为在爬取网页的内容时是按照一个一个块的来爬取,可以理解为并列部分,会存在/n分行符。

  

def parse_response(html):

   pattern = re.compile(class=\tab-details\>(.*?)</span>,re.S)

   items = re.findall(pattern,html)

   print(items)

   return items

  

  

  

参考:

  1.HTML input pattern 属性

  2.Pattern用法(正则表达式)

  3.JavaScript compile() 方法

  4.Python 正则表达re模块之findall()详解

  

  

总结

  到此这篇关于Python正则表达式re.compile()和re.findall()的文章就介绍到这了,更多相关Python正则re.compile()和re.findall()内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: