5-n-búsqueda de los datos adquiridos

4, el partido normal - la adquisición de datos

https://docs.python.org/zh-cn/3/library/re.html

Una expresión regular es una fórmula lógica de operaciones de cadena, algunas combinaciones de ciertos caracteres predefinidos, y éstas carácter particular, compuesta de un "carácter normal", la lógica de "reglas de carácter" A el filtrado para expresar el carácter

USADOS coincidencia de patrones

\w      匹配字母数字及下划线
\W      匹配f非字母数字下划线
\s      匹配任意空白字符,等价于[\t\n\r\f]
\S      匹配任意非空字符
\d      匹配任意数字
\D      匹配任意非数字
\A      匹配字符串开始
\Z      匹配字符串结束,如果存在换行,只匹配换行前的结束字符串
\z      匹配字符串结束
\G      匹配最后匹配完成的位置
\n      匹配一个换行符
\t      匹配一个制表符
^       匹配字符串的开头
$       匹配字符串的末尾
.       匹配任意字符,除了换行符,re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
[....]  用来表示一组字符,单独列出:[amk]匹配a,m或k
[^...]  不在[]中的字符:[^abc]匹配除了a,b,c之外的字符
*       匹配0个或多个的表达式
+       匹配1个或者多个的表达式
?       匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n}     精确匹配n前面的表示
{m,m}   匹配n到m次由前面的正则表达式定义片段,贪婪模式
a|b     匹配a或者b
()      匹配括号内的表达式,也表示一个组

revancha()

Trate de coincidir con un patrón a partir de una posición de partida de la cadena, si no emparejado, entonces la posición de partida, de los partidos () devuelve Ninguno
de sintaxis:
re.match (patrón, String, las banderas = 0)

import re

content= "hello 123 4567 World_This is a regex Demo"
result = re.match('^hello\s\d\d\d\s\d{4}\s\w{10}.*Demo$',content)
print(result)
print(result.group())
print(result.span())

result.group () Obtiene el resultado de la casación
result.span () es elegible para que coincida con la longitud de la cuerda

Pan partido

import re

content= "hello 123 4567 World_This is a regex Demo"
result = re.match("^hello.*Demo$",content)
print(result)
print(result.group())
print(result.span())

gol del partido

Si la cadena de match target específico es requerido por () encerrado

import re
content= "hello 1234567 World_This is a regex Demo"
result = re.match('^hello\s(\d+)\sWorld.*Demo$',content)
print(result)
print(result.group())
print(result.group(1))
print(result.span())

Después de obtener los resultados re.group (), si la expresión regular entre paréntesis, a continuación, re.group (1) obtenido es el resultado de la primera coincidencia de paréntesis,

partido de la codicia

import re

content= "hello 1234567 World_This is a regex Demo"
result= re.match('^hello.*(\d+).*Demo',content)
print(result)
print(result.group(1))

La razón único partido a 7, y no hay ninguna coincidencia a 1.234.567, esto sucede frente a. * Para hacer coincidir a cabo. * Se coincidir aquí tanto contenido como sea posible, lo que llamamos el partido codicioso.

#如果我们想要匹配到1234567则需要将正则表达式改为:

result= re.match('^he.*?(\d+).*Demo',content)

el modo de ajuste

Muchas veces el contenido es coincidente problema envoltura de la existencia, esta vez necesitamos patrón de uso correspondiente para que coincida con la envoltura de contenido re.S

import re


content = """hello 123456 world_this
my name is zhaofan
"""

result =re.match('^he.*?(\d+).*?zhaofan$',content,re.S)
print(result)
print(result.group())
print(result.group(1))

escape

import re

content= "price is $5.00"

result = re.match('price is \$5\.00',content)
print(result)
print(result.group())

Un resumen de lo anterior:
a hacer uso de paréntesis coincidentes pan se corresponde objetivo, tratar de utilizar no expansivo, hay una nueva línea re.S
destacaron partido re.match desde una posición inicial de un patrón de cadena de caracteres

investigación

re.search escanear todo el rendimiento de cuerda el resultado de un partido de éxito

import re

content = "extra things hello 123455 world_this is a Re Extra things"

result = re.search("hello.*?(\d+).*?Re",content)
print(result)
print(result.group())
print(result.group(1))

Esta vez no hay necesidad de escribir ^ y $, porque la búsqueda es para escanear toda la cadena
Nota: Por lo tanto, a fin de facilitar el partido, vamos a ser más de una búsqueda, no coinciden, partido debe coincidir con la cabeza, por lo que muchas veces no es particularmente conveniente

ejercicio de clasificación

import re

html = '''<div id="songs-list">
    <h2 class="title">经典老歌</h2>
    <p class="introduction">
        经典老歌列表
    </p>
    <ul id="list" class="list-group">
        <li data-view="2">一路上有你</li>
        <li data-view="7">
            <a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
        </li>
        <li data-view="4" class="active">
            <a href="/3.mp3" singer="齐秦">往事随风</a>
        </li>
        <li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
        <li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li>
        <li data-view="5">
            <a href="/6.mp3" singer="邓丽君">但愿人长久</a>
        </li>
    </ul>
</div>'''

result = re.search('<li.*?active.*?singer="(.*?)">(.*?)</a>',html,re.S)
print(result)
print(result.groups())
print(result.group(1))
print(result.group(2))

re.findall

Cadena de búsqueda, devuelve las subcadenas de todos los partidos en forma de una lista

import re

html = '''<div id="songs-list">
    <h2 class="title">经典老歌</h2>
    <p class="introduction">
        经典老歌列表
    </p>
    <ul id="list" class="list-group">
        <li data-view="2">一路上有你</li>
        <li data-view="7">
            <a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
        </li>
        <li data-view="4" class="active">
            <a href="/3.mp3" singer="齐秦">往事随风</a>
        </li>
        <li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
        <li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li>
        <li data-view="5">
            <a href="/6.mp3" singer="邓丽君">但愿人长久</a>
        </li>
    </ul>
</div>'''

results = re.findall('<li.*?href="(.*?)".*?singer="(.*?)">(.*?)</a>', html, re.S)
print(results)
print(type(results))
for result in results:
    print(result)
    print(result[0], result[1], result[2])

Ejemplo 2:

import re

html = '''<div id="songs-list">
    <h2 class="title">经典老歌</h2>
    <p class="introduction">
        经典老歌列表
    </p>
    <ul id="list" class="list-group">
        <li data-view="2">一路上有你</li>
        <li data-view="7">
            <a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
        </li>
        <li data-view="4" class="active">
            <a href="/3.mp3" singer="齐秦">往事随风</a>
        </li>
        <li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
        <li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li>
        <li data-view="5">
            <a href="/6.mp3" singer="邓丽君">但愿人长久</a>
        </li>
    </ul>
</div>'''

results = re.findall('<li.*?>\s*?(<a.*?>)?(\w+)(</a>)?\s*?</li>',html,re.S)
print(results)
for result in results:
    print(result[1])

resumen:

\s*? 这种用法其实就是为了解决有的有换行,有的没有换行的问题

(<a.*?>)? 这种用法是因为html中有的有a标签,有的没有的,?表示匹配一个或0个,正好可以用于匹配

re.sub

import re

content = "Extra things hello 123455 World_this is a regex Demo extra things"

content = re.sub('\d+','',content)
print(content)

Ejemplo 2:
En algunos casos hemos reemplazado el carácter, nos gustaría obtener una cadena de coincidencias, a continuación, añadir algo detrás

import re

content = "Extra things hello 123455 World_this is a regex Demo extra things"

content = re.sub('(\d+)',r'\1 7890',content)
print(content)

#\1是获取第一个匹配的结果,为了防止转义字符的问题,我们需要在前面加上r

re.compile

La expresión regular compilado en un objeto de expresión regular, para facilitar la reutilización de la expresión regular

import re
content= """hello 12345 world_this
fan
"""

pattern =re.compile("hello.*fan",re.S)

result = re.match(pattern,content)
print(result)
print(result.group())

experimento:

import requests
import re
html = requests.get("http://www.iphai.com/free/wg")
find_tr = re.compile('<tr>(.*?)</tr>', re.S)
trs = find_tr.findall(html.text)  #需要获取的是网页的文本string   trs为列表
print(trs[2])  #出现不规则的一行
protocol = re.compile('<td>\s+HTTPS\s+</td>', re.S)
pp = protocol.findall(trs[3]) #匹配的是具有HTTPS的一行
['<td>\n                            HTTPS                        </td>']

protocol = re.compile('<td>\s+(HTTPS)\s+</td>', re.S)  #仅仅匹配分组,获取分组
pp = protocol.findall(trs[3])  
print(pp)
['HTTPS']

Supongo que te gusta

Origin www.cnblogs.com/g2thend/p/12452191.html
Recomendado
Clasificación