精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Python正則表達式re模塊簡明筆記

開發(fā) 后端
要注意的是,正則表達式并不是一個程序,而是用于處理字符串的一種模式,如果你想用它來處理字符串,就必須使用支持正則表達式的工具,比如 Linux 中的 awk, sed, grep,或者編程語言 Perl, Python, Java 等等。

簡介

正則表達式(regular expression)是可以匹配文本片段的模式。最簡單的正則表達式就是普通字符串,可以匹配其自身。比如,正則表達式 ‘hello’ 可以匹配字符串 ‘hello’。

要注意的是,正則表達式并不是一個程序,而是用于處理字符串的一種模式,如果你想用它來處理字符串,就必須使用支持正則表達式的工具,比如 Linux 中的 awk, sed, grep,或者編程語言 Perl, Python, Java 等等。

正則表達式有多種不同的風格,下表列出了適用于 Python 或 Perl 等編程語言的部分元字符以及說明:

re 模塊

在 Python 中,我們可以使用內(nèi)置的 re 模塊來使用正則表達式。

有一點需要特別注意的是,正則表達式使用 \ 對特殊字符進行轉(zhuǎn)義,比如,為了匹配字符串 ‘python.org’,我們需要使用正則表達式 'python\.org',而 Python 的字符串本身也用 \ 轉(zhuǎn)義,所以上面的正則表達式在 Python 中應(yīng)該寫成 'python\\.org',這會很容易陷入 \ 的困擾中,因此,我們建議使用 Python 的原始字符串,只需加一個 r 前綴,上面的正則表達式可以寫成:

r'python\.org'

re 模塊提供了不少有用的函數(shù),用以匹配字符串,比如:

  • compile 函數(shù)

  • match 函數(shù)

  • search 函數(shù)

  • findall 函數(shù)

  • finditer 函數(shù)

  • split 函數(shù)

  • sub 函數(shù)

  • subn 函數(shù)

re 模塊的一般使用步驟如下:

  • 使用 compile 函數(shù)將正則表達式的字符串形式編譯為一個 Pattern 對象

  • 通過 Pattern 對象提供的一系列方法對文本進行匹配查找,獲得匹配結(jié)果(一個 Match 對象)

  • ***使用 Match 對象提供的屬性和方法獲得信息,根據(jù)需要進行其他的操作

compile 函數(shù)

compile 函數(shù)用于編譯正則表達式,生成一個 Pattern 對象,它的一般使用形式如下:

re.compile(pattern[, flag])

其中,pattern 是一個字符串形式的正則表達式,flag 是一個可選參數(shù),表示匹配模式,比如忽略大小寫,多行模式等。

下面,讓我們看看例子。

import re

# 將正則表達式編譯成 Pattern 對象
pattern = re.compile(r'\d+')

在上面,我們已將一個正則表達式編譯成 Pattern 對象,接下來,我們就可以利用 pattern 的一系列方法對文本進行匹配查找了。Pattern 對象的一些常用方法主要有:

  • match 方法

  • search 方法

  • findall 方法

  • finditer 方法

  • split 方法

  • sub 方法

  • subn 方法

match 方法

match 方法用于查找字符串的頭部(也可以指定起始位置),它是一次匹配,只要找到了一個匹配的結(jié)果就返回,而不是查找所有匹配的結(jié)果。它的一般使用形式如下:

match(string[, pos[, endpos]])

其中,string 是待匹配的字符串,pos 和 endpos 是可選參數(shù),指定字符串的起始和終點位置,默認值分別是 0 和 len (字符串長度)。因此,當你不指定 pos 和 endpos 時,match 方法默認匹配字符串的頭部

當匹配成功時,返回一個 Match 對象,如果沒有匹配上,則返回 None。

看看例子。

>>> import re
>>> pattern = re.compile(r'\d+')                    # 用于匹配至少一個數(shù)字
>>> m = pattern.match('one12twothree34four')        # 查找頭部,沒有匹配
>>> print m
None
>>> m = pattern.match('one12twothree34four', 2, 10) # 從'e'的位置開始匹配,沒有匹配
>>> print m
None
>>> m = pattern.match('one12twothree34four', 3, 10) # 從'1'的位置開始匹配,正好匹配
>>> print m                                         # 返回一個 Match 對象
<_sre.SRE_Match object at 0x10a42aac0>
>>> m.group(0)   # 可省略 0
'12'
>>> m.start(0)   # 可省略 0
3
>>> m.end(0)     # 可省略 0
5
>>> m.span(0)    # 可省略 0
(3, 5)

在上面,當匹配成功時返回一個 Match 對象,其中:

  • group([group1, …]) 方法用于獲得一個或多個分組匹配的字符串,當要獲得整個匹配的子串時,可直接使用 group() 或 group(0)

  • start([group]) 方法用于獲取分組匹配的子串在整個字符串中的起始位置(子串***個字符的索引),參數(shù)默認值為 0;

  • end([group]) 方法用于獲取分組匹配的子串在整個字符串中的結(jié)束位置(子串***一個字符的索引+1),參數(shù)默認值為 0;

  • span([group]) 方法返回 (start(group), end(group))

再看看一個例子:

>>> import re
>>> pattern = re.compile(r'([a-z]+) ([a-z]+)', re.I)   # re.I 表示忽略大小寫
>>> m = pattern.match('Hello World Wide Web')
>>> print m                               # 匹配成功,返回一個 Match 對象
<_sre.SRE_Match object at 0x10bea83e8>
>>> m.group(0)                            # 返回匹配成功的整個子串
'Hello World'
>>> m.span(0)                             # 返回匹配成功的整個子串的索引
(0, 11)
>>> m.group(1)                            # 返回***個分組匹配成功的子串
'Hello'
>>> m.span(1)                             # 返回***個分組匹配成功的子串的索引
(0, 5)
>>> m.group(2)                            # 返回第二個分組匹配成功的子串
'World'
>>> m.span(2)                             # 返回第二個分組匹配成功的子串
(6, 11)
>>> m.groups()                            # 等價于 (m.group(1), m.group(2), ...)
('Hello', 'World')
>>> m.group(3)                            # 不存在第三個分組
Traceback (most recent call last):
  File "<stdin>", line 1, in <module> IndexError: no such group

search 方法

search 方法用于查找字符串的任何位置,它也是一次匹配,只要找到了一個匹配的結(jié)果就返回,而不是查找所有匹配的結(jié)果,它的一般使用形式如下:

search(string[, pos[, endpos]])

其中,string 是待匹配的字符串,pos 和 endpos 是可選參數(shù),指定字符串的起始和終點位置,默認值分別是 0 和 len (字符串長度)。

當匹配成功時,返回一個 Match 對象,如果沒有匹配上,則返回 None。

讓我們看看例子:

>>> import re
>>> pattern = re.compile('\d+')
>>> m = pattern.search('one12twothree34four'# 這里如果使用 match 方法則不匹配
>>> m
<_sre.SRE_Match object at 0x10cc03ac0>
>>> m.group()
'12'
>>> m = pattern.search('one12twothree34four', 10, 30# 指定字符串區(qū)間
>>> m
<_sre.SRE_Match object at 0x10cc03b28>
>>> m.group()
'34'
>>> m.span()
(13, 15)

再來看一個例子:

# -*- coding: utf-8 -*-
import re

# 將正則表達式編譯成 Pattern 對象
pattern = re.compile(r'\d+')

# 使用 search() 查找匹配的子串,不存在匹配的子串時將返回 None
# 這里使用 match() 無法成功匹配
m = pattern.search('hello 123456 789')

if m:
    # 使用 Match 獲得分組信息
    print 'matching string:',m.group()
    print 'position:',m.span()

執(zhí)行結(jié)果:

matching string: 123456
position: (6, 12)

findall 方法

上面的 match 和 search 方法都是一次匹配,只要找到了一個匹配的結(jié)果就返回。然而,在大多數(shù)時候,我們需要搜索整個字符串,獲得所有匹配的結(jié)果。

findall 方法的使用形式如下:

findall(string[, pos[, endpos]])

其中,string 是待匹配的字符串,pos 和 endpos 是可選參數(shù),指定字符串的起始和終點位置,默認值分別是 0 和 len (字符串長度)。

findall 以列表形式返回全部能匹配的子串,如果沒有匹配,則返回一個空列表。

看看例子:

import re

pattern = re.compile(r'\d+')   # 查找數(shù)字
result1 = pattern.findall('hello 123456 789')
result2 = pattern.findall('one1two2three3four4', 0, 10)

print result1
print result2

執(zhí)行結(jié)果:

['123456', '789']
['1', '2']

finditer 方法

finditer 方法的行為跟 findall 的行為類似,也是搜索整個字符串,獲得所有匹配的結(jié)果。但它返回一個順序訪問每一個匹配結(jié)果(Match 對象)的迭代器。

看看例子:

# -*- coding: utf-8 -*-

import re

pattern = re.compile(r'\d+')

result_iter1 = pattern.finditer('hello 123456 789')
result_iter2 = pattern.finditer('one1two2three3four4', 0, 10)

print type(result_iter1)
print type(result_iter2)

print 'result1...'
for m1 in result_iter1:   # m1 是 Match 對象
    print 'matching string: {}, position: {}'.format(m1.group(), m1.span())

print 'result2...'
for m2 in result_iter2:
    print 'matching string: {}, position: {}'.format(m2.group(), m2.span())

執(zhí)行結(jié)果:

<type 'callable-iterator'>
<type 'callable-iterator'>
result1...
matching string: 123456, position: (6, 12)
matching string: 789, position: (13, 16)
result2...
matching string: 1, position: (3, 4)
matching string: 2, position: (7, 8)

split 方法

split 方法按照能夠匹配的子串將字符串分割后返回列表,它的使用形式如下:

split(string[, maxsplit])

其中,maxsplit 用于指定***分割次數(shù),不指定將全部分割。

看看例子:

import re

p = re.compile(r'[\s\,\;]+')
print p.split('a,b;; c   d')

執(zhí)行結(jié)果:

['a', 'b', 'c', 'd']

sub 方法

sub 方法用于替換。它的使用形式如下:

sub(repl, string[, count])

其中,repl 可以是字符串也可以是一個函數(shù):

  • 如果 repl 是字符串,則會使用 repl 去替換字符串每一個匹配的子串,并返回替換后的字符串,另外,repl 還可以使用 \id 的形式來引用分組,但不能使用編號 0;

  • 如果 repl 是函數(shù),這個方法應(yīng)當只接受一個參數(shù)(Match 對象),并返回一個字符串用于替換(返回的字符串中不能再引用分組)。

count 用于指定最多替換次數(shù),不指定時全部替換。

看看例子:

import re

p = re.compile(r'(\w+) (\w+)')
s = 'hello 123, hello 456'

def func(m):
    return 'hi' + ' ' + m.group(2)

print p.sub(r'hello world', s)  # 使用 'hello world' 替換 'hello 123' 和 'hello 456'
print p.sub(r'\2 \1', s)        # 引用分組
print p.sub(func, s)
print p.sub(func, s, 1)         # 最多替換一次

執(zhí)行結(jié)果:

hello world, hello world
123 hello, 456 hello
hi 123, hi 456
hi 123, hello 456

subn 方法

subn 方法跟 sub 方法的行為類似,也用于替換。它的使用形式如下:

subn(repl, string[, count])

它返回一個元組:

(sub(repl, string[, count]), 替換次數(shù))

元組有兩個元素,***個元素是使用 sub 方法的結(jié)果,第二個元素返回原字符串被替換的次數(shù)。

看看例子:

import re

p = re.compile(r'(\w+) (\w+)')
s = 'hello 123, hello 456'

def func(m):
    return 'hi' + ' ' + m.group(2)

print p.subn(r'hello world', s)
print p.subn(r'\2 \1', s)
print p.subn(func, s)
print p.subn(func, s, 1)

執(zhí)行結(jié)果:

('hello world, hello world', 2)
('123 hello, 456 hello', 2)
('hi 123, hi 456', 2)
('hi 123, hello 456', 1)

其他函數(shù)

事實上,使用 compile 函數(shù)生成的 Pattern 對象的一系列方法跟 re 模塊的多數(shù)函數(shù)是對應(yīng)的,但在使用上有細微差別。

match 函數(shù)

match 函數(shù)的使用形式如下:

re.match(pattern, string[, flags]):

其中,pattern 是正則表達式的字符串形式,比如 \d+[a-z]+

而 Pattern 對象的 match 方法使用形式是:

match(string[, pos[, endpos]])

可以看到,match 函數(shù)不能指定字符串的區(qū)間,它只能搜索頭部,看看例子:

import re
m1 = re.match(r'\d+', 'One12twothree34four')
if m1:
    print 'matching string:',m1.group()
else:
    print 'm1 is:',m1

m2 = re.match(r'\d+', '12twothree34four')
if m2:
    print 'matching string:', m2.group()
else:
    print 'm2 is:',m2

執(zhí)行結(jié)果:

m1 is: None
matching string: 12

search 函數(shù)

search 函數(shù)的使用形式如下:

re.search(pattern, string[, flags])

search 函數(shù)不能指定字符串的搜索區(qū)間,用法跟 Pattern 對象的 search 方法類似。

findall 函數(shù)

findall 函數(shù)的使用形式如下:

re.findall(pattern, string[, flags])

findall 函數(shù)不能指定字符串的搜索區(qū)間,用法跟 Pattern 對象的 findall 方法類似。

看看例子:

import re

print re.findall(r'\d+', 'hello 12345 789')

# 輸出
['12345', '789']

finditer 函數(shù)

finditer 函數(shù)的使用方法跟 Pattern 的 finditer 方法類似,形式如下:

re.finditer(pattern, string[, flags])

split 函數(shù)

split 函數(shù)的使用形式如下:

re.split(pattern, string[, maxsplit])

sub 函數(shù)

sub 函數(shù)的使用形式如下:

re.sub(pattern, repl, string[, count])

subn 函數(shù)

subn 函數(shù)的使用形式如下:

re.subn(pattern, repl, string[, count])

到底用哪種方式

從上文可以看到,使用 re 模塊有兩種方式:

  • 使用 re.compile 函數(shù)生成一個 Pattern 對象,然后使用 Pattern 對象的一系列方法對文本進行匹配查找;

  • 直接使用 re.match, re.search 和 re.findall 等函數(shù)直接對文本匹配查找;

下面,我們用一個例子展示這兩種方法。

先看第 1 種用法:

import re

# 將正則表達式先編譯成 Pattern 對象
pattern = re.compile(r'\d+')

print pattern.match('123, 123')
print pattern.search('234, 234')
print pattern.findall('345, 345')

再看第 2 種用法:

import re

print re.match(r'\d+', '123, 123')
print re.search(r'\d+', '234, 234')
print re.findall(r'\d+', '345, 345')

如果一個正則表達式需要用到多次(比如上面的 \d+),在多種場合經(jīng)常需要被用到,出于效率的考慮,我們應(yīng)該預(yù)先編譯該正則表達式,生成一個 Pattern 對象,再使用該對象的一系列方法對需要匹配的文件進行匹配;而如果直接使用 re.match, re.search 等函數(shù),每次傳入一個正則表達式,它都會被編譯一次,效率就會大打折扣。

因此,我們推薦使用第 1 種用法。

匹配中文

在某些情況下,我們想匹配文本中的漢字,有一點需要注意的是,中文的 unicode 編碼范圍 主要在 [\u4e00-\u9fa5],這里說主要是因為這個范圍并不完整,比如沒有包括全角(中文)標點,不過,在大部分情況下,應(yīng)該是夠用的。

假設(shè)現(xiàn)在想把字符串 title = u'你好,hello,世界' 中的中文提取出來,可以這么做:

# -*- coding: utf-8 -*-

import re

title = u'你好,hello,世界'
pattern = re.compile(ur'[\u4e00-\u9fa5]+')
result = pattern.findall(title)

print result

注意到,我們在正則表達式前面加上了兩個前綴 ur,其中 r 表示使用原始字符串,u 表示是 unicode 字符串。

執(zhí)行結(jié)果:

[u'\u4f60\u597d', u'\u4e16\u754c']

貪婪匹配

在 Python 中,正則匹配默認是貪婪匹配(在少數(shù)語言中可能是非貪婪),也就是匹配盡可能多的字符

比如,我們想找出字符串中的所有 div 塊:

import re

content = 'aa<div>test1</div>bb<div>test2</div>cc'
pattern = re.compile(r'<div>.*</div>')
result = pattern.findall(content)

print result

執(zhí)行結(jié)果:

['<div>test1</div>bb<div>test2</div>']

由于正則匹配是貪婪匹配,也就是盡可能多的匹配,因此,在成功匹配到***個 </div> 時,它還會向右嘗試匹配,查看是否還有更長的可以成功匹配的子串。

如果我們想非貪婪匹配,可以加一個 ?,如下:

import re

content = 'aa<div>test1</div>bb<div>test2</div>cc'
pattern = re.compile(r'<div>.*?</div>')    # 加上 ?
result = pattern.findall(content)

print result

結(jié)果:

['<div>test1</div>', '<div>test2</div>']

小結(jié)

re 模塊的一般使用步驟如下:

  • 使用 compile 函數(shù)將正則表達式的字符串形式編譯為一個 Pattern 對象;

  • 通過 Pattern 對象提供的一系列方法對文本進行匹配查找,獲得匹配結(jié)果(一個 Match 對象);

  • ***使用 Match 對象提供的屬性和方法獲得信息,根據(jù)需要進行其他的操作;

Python 的正則匹配默認是貪婪匹配。

責任編輯:張燕妮 來源: FunHacks
相關(guān)推薦

2023-11-15 08:32:16

正則表達式Python

2024-09-14 09:18:14

Python正則表達式

2021-01-27 11:34:19

Python正則表達式字符串

2010-03-25 18:25:36

Python正則表達式

2018-09-27 15:25:08

正則表達式前端

2020-09-04 09:16:04

Python正則表達式虛擬機

2009-08-13 15:24:27

C#正則表達式

2009-08-11 13:00:41

C#正則表達式

2010-03-01 15:51:59

Python則表達式

2010-03-11 08:55:45

python正則表達式

2019-12-10 10:40:57

Python正則表達式編程語言

2010-07-13 16:56:30

Perl正則表達式

2015-04-16 11:16:05

PHPPOSIX正則表達式

2022-03-28 06:19:14

正則表達式開發(fā)

2017-05-12 10:47:45

Linux正則表達式程序基礎(chǔ)

2009-09-16 18:19:34

正則表達式組

2019-07-17 15:45:47

正則表達式字符串前端

2009-02-18 09:48:20

正則表達式Java教程

2011-06-02 12:34:16

正則表達式

2016-11-10 16:21:22

Java 正則表達式
點贊
收藏

51CTO技術(shù)棧公眾號

国产cdts系列另类在线观看| 精品久久久久久久久久久久久久久久久久| 国产麻豆精品| 亚洲主播在线观看| 精品视频一区在线| 中文字幕第99页| 欧美精品日本| 亚洲欧美综合区自拍另类| 日韩爱爱小视频| 动漫一区二区| 国产精品进线69影院| av成人综合网| 嫩草影院一区二区三区| 欧美激情成人在线| 国产一区二区三区在线免费观看| 999热精品视频| 久久久一本精品| 亚洲综合男人的天堂| 日韩理论片在线观看| 好男人www在线视频| 久久综合导航| 久久久久久91| 99热在线观看精品| 天海翼亚洲一区二区三区| 91精品国产91综合久久蜜臀| 欧美亚洲精品一区二区| 成人国产免费电影| 国产欧美一区二区精品久导航| 99精品国产高清在线观看| 日韩欧美国产另类| 在线亚洲国产精品网站| 久久中国妇女中文字幕| 日本人亚洲人jjzzjjz| 果冻天美麻豆一区二区国产| 91精品一区二区三区久久久久久| 毛葺葺老太做受视频| 激情aⅴ欧美一区二区欲海潮| 亚洲丝袜另类动漫二区| 亚洲精品成人a8198a| 色视频在线看| 91女厕偷拍女厕偷拍高清| 亚洲在线第一页| 国产一区二区三区视频免费观看| 久久综合亚州| 国产成人精品亚洲精品| 日韩精品视频免费看| 欧美午夜精品| 欧美情侣性视频| 黄色香蕉视频在线观看| 欧美www视频在线观看| 亚洲性69xxxbbb| 好吊视频在线观看| 九九在线精品| 亚洲欧美日韩综合| 日本二区在线观看| 欧美日韩黑人| 中文字幕在线日韩 | 青草视频在线观看视频| 污污视频在线| 亚洲香肠在线观看| 成人黄色大片网站| 色戒汤唯在线观看| 狠狠爱在线视频一区| 欧美 日韩精品| 欧美性xxx| 在线观看日韩电影| 性生生活大片免费看视频| 成人豆花视频| 精品国产乱码久久| 中文字幕xxx| 精品一区二区三区中文字幕老牛 | 久久99导航| 欧美在线观看在线观看| 欧美激情一区二区三区四区| 亚洲欧洲一区二区福利| caopeng在线| 午夜精品久久久久久久久久| 日本精品一区二区三区四区 | 欧美专区在线观看一区| 一级黄色在线播放| jazzjazz国产精品久久| 亚洲欧美一区二区激情| 国产黄色片在线| 你懂的视频一区二区| 国内免费精品永久在线视频| 青青视频在线免费观看| 精品一区二区三区在线观看国产| 成人动漫视频在线观看免费| 天堂中文在线资| 国产精品久久久久久久久免费相片| 最新av网址在线观看| wwww在线观看免费视频| 欧美主播一区二区三区| 日韩精品――色哟哟| 亚洲精品一级二级三级| 美女国内精品自产拍在线播放| 青青草原免费观看| 日韩在线一区二区| 波多野结衣久草一区| 九色网友自拍视频手机在线| 亚洲色图清纯唯美| 日av中文字幕| 一区二区亚洲视频| 色多多国产成人永久免费网站| 久久久久久欧美精品se一二三四| 日韩av一区二区在线影视| 91精品黄色| 成人18在线| 精品日韩中文字幕| 日本中文字幕在线不卡| 国产精品亚洲二区| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 嫩草影视亚洲| 欧美国产精品人人做人人爱| 中文字幕一区二区免费| 91丨九色丨国产丨porny| 加勒比海盗1在线观看免费国语版| 芒果视频成人app| 精品国产欧美一区二区| 很污很黄的网站| 久久精选视频| 精品在线视频一区二区| 日本不卡影院| 日韩午夜中文字幕| 国产精品69久久久久孕妇欧美| 亚洲欧美久久久| av在线不卡一区| av网站免费在线观看| 欧美四级电影网| 中文字幕第20页| 99精品视频免费观看视频| 99久re热视频这里只有精品6| 成人高清网站| 91成人在线观看喷潮| 荫蒂被男人添免费视频| 一区二区三区网站| 国产三级精品网站| av大片在线播放| 日本高清不卡视频| 美国黄色a级片| 亚洲欧美视频| 欧美xxxx黑人又粗又长密月| 96av在线| 亚洲精品av在线| 国产精品第一页在线观看| 国产一区二区看久久| 日韩 欧美 自拍| 国产精品3区| 久久精品一区中文字幕| 在线观看国产黄| 国产精品久久看| 男人的天堂最新网址| 99久久夜色精品国产亚洲狼| 国产拍精品一二三| 黄网页免费在线观看| 欧美精品国产精品| 老熟妇高潮一区二区三区| 激情综合色播激情啊| 一区精品视频| 精品一区二区三区免费看| 久久国产精品久久久久久| www.我爱av| 午夜私人影院久久久久| 在线免费观看成年人视频| 久久电影一区| 一卡二卡3卡四卡高清精品视频| 日韩成人综合网| 美日韩精品视频免费看| 农村少妇久久久久久久| 欧美视频一区二区三区…| 手机看片福利视频| 国产在线视频精品一区| 污污污污污污www网站免费| 懂色av一区二区| 欧美诱惑福利视频| 在线观看黄av| 欧美xxxx老人做受| 国产精品久久久久久人| 国产精品久久久久久久浪潮网站| www日本在线观看| 久久视频一区| 中国成人在线视频| 精品av导航| 国产精品吴梦梦| 男人添女人下部高潮视频在线观看| 亚洲精品国产拍免费91在线| 日韩免费av网站| 依依成人精品视频| a毛片毛片av永久免费| 麻豆成人久久精品二区三区红 | 日韩三级免费观看| av大片免费观看| 国产精品美女久久久久高潮| 又大又长粗又爽又黄少妇视频| 久久国产日本精品| 伊人婷婷久久| 欧美人成在线观看ccc36| 国产精品影院在线观看| 超碰在线cao| 久久视频在线视频| 日本天堂影院在线视频| 91精品视频网| 欧美精品入口蜜桃| 国产午夜精品理论片a级大结局| 91丝袜超薄交口足| 老司机精品视频网站| 亚洲欧洲日夜超级视频| 日韩一级电影| 99国产超薄丝袜足j在线观看| 中文字幕在线高清| 久久69精品久久久久久国产越南| 国产在线一二三区| 亚洲国语精品自产拍在线观看| 国产精品高潮呻吟av| 色www精品视频在线观看| 久久久久久免费观看| ●精品国产综合乱码久久久久| 亚洲视频免费一区| 五月天免费网站| 99精品欧美一区二区三区小说 | 中文字幕日韩高清| 日本人妻丰满熟妇久久久久久| 欧美高清视频在线高清观看mv色露露十八 | 国产在线资源| 亚洲精品v欧美精品v日韩精品| 国产三级伦理片| 在线免费亚洲电影| 五月婷婷中文字幕| 亚洲电影激情视频网站| 国产精品白嫩白嫩大学美女| 国产精品欧美极品| 国产美女永久免费无遮挡| av一区二区不卡| 亚洲免费观看在线| 国产乱国产乱300精品| 欧美午夜aaaaaa免费视频| 久久婷婷麻豆| 欧美一级片中文字幕| 国产农村妇女精品一区二区| 久久久亚洲精品无码| 极品尤物久久久av免费看| 男人日女人的bb| 欧美激情性爽国产精品17p| 欧美 日韩 国产 在线观看| 99久久亚洲精品蜜臀| 在线一区日本视频| 久久久久久免费视频| 在线视频91| 久久精品影视| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 欧美疯狂性受xxxxx喷水图片| 中文字幕在线观看你懂的| 欧美亚洲愉拍一区二区| 亚洲天堂免费av| 欧美日韩国产一级片| 91精品国自产| 欧美一区二区三区免费大片| 国产av无码专区亚洲a∨毛片| 日韩久久久久久| 色呦呦视频在线| 亚洲欧美制服第一页| 成年人在线观看网站| 久久久精品欧美| 欧美人与牲禽动交com| 午夜免费在线观看精品视频| 在线毛片观看| 国产精品一区二区久久国产| 婷婷激情成人| 国产91精品一区二区绿帽| 久久综合五月婷婷| 日本午夜精品电影| 欧美freesextv| 美女扒开大腿让男人桶| 宅男噜噜噜66国产日韩在线观看| 国产精品-区区久久久狼 | 欧美成人精品一区二区综合免费| 成人av综合一区| 亚洲v国产v欧美v久久久久久| 国产精品国产a| 国产精品第56页| 欧美日韩中文字幕一区二区| www.成人精品| 亚洲欧美另类国产| 国产成人午夜| 日本久久久久久| 久久亚洲精精品中文字幕| 久久久久久艹| 天天综合亚洲| 国产日韩一区二区在线| 久久精品国产一区二区三| 久久久久亚洲无码| 国产精品麻豆网站| 91久久国产视频| 6080午夜不卡| 精品无吗乱吗av国产爱色| 美女久久久久久久| 欧美大片免费观看网址| 成人自拍网站| 日韩精品午夜| jizzjizzxxxx| 国产91丝袜在线播放九色| 中文字幕免费在线看线人动作大片| 一区二区三区在线观看动漫 | 欧美成人猛片aaaaaaa| 精品美女视频在线观看免费软件| 色综合天天综合网国产成人网| 亚洲人免费短视频| 懂色中文一区二区三区在线视频| 欧美三级美国一级| 精品国产av无码一区二区三区| 老司机免费视频一区二区| 亚洲av无码一区二区三区网址| 亚洲精品综合在线| 欧美日韩在线视频播放| 亚洲国产成人爱av在线播放| 成人欧美在线| 国产精品视频免费观看www| 欧美亚洲色图校园春色| 国产精品日韩三级| 老司机精品视频一区二区三区| 亚洲精品成人无码| 午夜精品久久久久久久久久| 亚洲av综合色区无码一二三区 | 国产一区二区三区国产| 日韩毛片无码永久免费看| 日韩欧美综合在线视频| 天堂av中文字幕| 欧美精品videosex极品1| 精品亚洲二区| 蜜桃网站在线观看| 国产美女精品在线| 四虎影视1304t| 欧美日韩一区三区四区| 高清av电影在线观看| 国产ts一区二区| 亚洲最好看的视频| 人妻有码中文字幕| 91免费视频大全| 黄色片免费观看视频| 亚洲国产欧美一区二区三区久久| av中文字幕在线看| 国产欧美日韩亚洲| 亚洲久久一区| av网站免费在线播放| 欧美性xxxxhd| 精品久久久久一区二区三区| 日本中文字幕久久看| 久久av影视| 天天操天天爱天天爽| 国产精品久久久久久久岛一牛影视| 久久这里只有精品9| 一区二区三区视频免费在线观看| 色在线中文字幕| 日本在线免费观看一区| 三级亚洲高清视频| 能直接看的av| 制服.丝袜.亚洲.另类.中文 | 久久电影院7| jizzzz日本| 亚洲人成网站精品片在线观看| 国产乱码精品一区二区| 欧美大片在线看| 久久久久观看| 久久婷婷国产精品| 国产视频一区不卡| 伊人久久一区二区| 不卡av在线网站| 红杏aⅴ成人免费视频| 农村妇女精品一二区| 亚洲国产成人私人影院tom | 国产高清一区日本| 久久综合久久鬼| 亚洲欧美国产精品久久久久久久 | 精品中文字幕人| 久久亚洲不卡| 殴美一级黄色片| 精品国产青草久久久久福利| 全亚洲第一av番号网站| 资源网第一页久久久| 高清不卡一二三区| 黄瓜视频在线免费观看| xxxxx成人.com| 久久99国产精品久久99大师| 国产免费视频传媒| 亚洲自拍与偷拍| 极品美乳网红视频免费在线观看| 成人欧美一区二区三区在线| 亚洲高清电影| 手机看片国产日韩| 亚洲第一网站男人都懂| 欧美国产日韩电影| 激情五月婷婷六月| 中文字幕电影一区| 日本精品久久久久| 国产日韩欧美影视| 国产精品综合| 九九热精品在线观看| 一区二区三区视频观看| 成人香蕉社区| 国产三级精品三级在线|