正则表达式范围性匹配

Posted tantao258

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式范围性匹配相关的知识,希望对你有一定的参考价值。

1、

import re
key = r"<html><body><h1>hello world<h1></body></html>"#这段是你要匹配的文本
p1 = r"(?<=<h1>).+?(?=<h1>)"#这是我们写的正则表达式规则,你现在可以不理解啥意思
pattern1 = re.compile(p1)#我们在编译这段正则表达式
matcher1 = re.search(pattern1,key)#在源文本中搜索符合正则表达式的部分
print(matcher1.group(0))#打印出来

#hello world

2、

import re
key = r"javapythonhtmlvhdl"#这是源文本
p1 = r"python"#这是我们写的正则表达式
pattern1 = re.compile(p1)#同样是编译
matcher1 = re.search(pattern1,key)#同样是查询
print(matcher1.group(0))

#python

3、

import re
key = r"<h1>hello world<h1>"#源文本
p1 = r"<h1>.+<h1>"#我们写的正则表达式,下面会将为什么【.字符在正则表达式代表着可以代表任何一个字符(包括它本身)】
pattern1 = re.compile(p1)
print(pattern1.findall(key))#发没发现,我怎么写成findall了?咋变了呢?

#[‘<h1>hello world<h1>‘]

4、#正则表达式中有一个字符\,这个符号通常用来把特殊的符号转成普通的,把普通的转成特殊的,

      #我们在.的前面加上了转义符\,但是并不是代表匹配“\.”的意思,而是只匹配“.”的意思

import re
key = r"[email protected]"
p1 = r"[email protected]\.edu\.cn"
pattern1 = re.compile(p1)
print (pattern1.findall(key))

#[‘[email protected]‘]

5、#有没有发现我们第一次用.时,后面还跟了一个+?那这个加号是干什么的呢

     #“.字符在正则表达式代表着可以代表任何一个字符(包括它本身)”,但是"hello world"可不是一个字符。
   # +的作用是将前面一个字符或一个子表达式重复一遍或者多遍
     #比方说表达式“ab+”那么它能匹配到“abbbbb”,但是不能匹配到"a",它要求你必须得有个b,多了不限,少了不行

     #问我有没有那种“有没有都行,有多少都行的表达方式”,回答是有的。【*】跟在其他符号后面表达可以匹配到它0次或多次

     比方说我们在王叶内遇到了链接,可能既有http://开头的,又有https://开头的,我们怎么处理?

import re
key = r"http://www.nsfbuhwe.com and https://www.auhfisna.com"#胡编乱造的网址,别在意
p1 = r"https*://"#看那个星号!
pattern1 = re.compile(p1)
print (pattern1.findall(key))

#[‘http://‘, ‘https://‘]

6、[]代表匹配里面的字符中的任意一个

import re

key = r"lalala<hTml>hello</Html>heiheihei"
p1 = r"<[Hh][Tt][Mm][Ll]>.+?</[Hh][Tt][Mm][Ll]>"
pattern1 = re.compile(p1)
print pattern1.findall(key)

#[‘<hTml>hello</Html>‘]

  

以上是关于正则表达式范围性匹配的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配

学不会的python之正则表达式详解(re模块)

学不会的python之正则表达式详解(re模块)

Linux命令中使用正则表达式

Js正则表达式的如何写这样一个匹配规则!1) 取指定范围的内容 2)过滤指定范围的内容