欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 正則表達式(regular)知識(整理)

正則表達式(regular)知識(整理)

熱門標簽:梅縣地圖標注 呼叫系統外呼只能兩次 貴港公司如何申請400電話 ai電話機器人搭建 400電話辦理電話辦理 地圖標注教學點 外呼系統無呼出路由是什么原因 西藏智能外呼系統代理商 甘肅醫療外呼系統排名

正則(regular),要使用正則表達式需要導入Python中的re(regular正則的縮寫)模塊。正則表達式是對字符串的處理,我們知道,字符串中有時候包含很多我們想要提取的信息,掌握這些處理字符串的方法,能夠方便很多我們的操作。

    正則表達式(regular),處理字符串的方法。

    正則是一種常用的方法,因為python中文件處理很常見,文件里面包含的是字符串,要想處理字符串,那么就需要用到正則表達式。因而要掌握好正則表達式。下面下來看看正則表達式中包含的方法:

    (1)match(pattern, string, flags=0)

 def match(pattern, string, flags=0):
    """Try to apply the pattern at the start of the string, returning
    a match object, or None if no match was found."""
    return _compile(pattern, flags).match(string)

     從上面注釋:Try to apply the pattern at the start of the string,returning a match object,or None if no match was found.從字符串的開頭開始查找,返回一個match object對象,如果沒有找到,返回一個None。

    重點:(1)從開頭開始查找;(2)如果查找不到返回None。

    下面來看看幾個實例: 

 import re
  string = "abcdef"
  m = re.match("abc",string)  (1)匹配"abc",并查看返回的結果是什么
  print(m)
  print(m.group()) 
  n = re.match("abcf",string)
  print(n)      (2)字符串不在列表中查找的情況
  l = re.match("bcd",string)  (3)字符串在列表中間查找情況
  print(l)

    運行結果如下:

 _sre.SRE_Match object; span=(0, 3), match='abc'>  (1)abc             (2) None             (3)
None             (4)

    從上面輸出結果(1)可以看出,使用match()匹配,返回的是一個match object對象,要想轉換為看得到的情況,要使用group()進行轉換(2)處所示;如果匹配的正則表達式不在字符串中,則返回None(3);match(pattern,string,flag)是從字符串開始的地方匹配的,并且只能從字符串的開始處進行匹配(4)所示。

    (2)fullmatch(pattern, string, flags=0)

def fullmatch(pattern, string, flags=0):
    """Try to apply the pattern to all of the string, returning
    a match object, or None if no match was found."""
    return _compile(pattern, flags).fullmatch(string)

    從上面注釋:Try to apply the pattern to all of the string,returning a match object,or None if no match was found...

    (3)search(pattern,string,flags)

 def search(pattern, string, flags=0):
    """Scan through string looking for a match to the pattern, returning
    a match object, or None if no match was found."""
    return _compile(pattern, flags).search(string)
 search(pattern,string,flags)的注釋是Scan throgh string looking for a match to the pattern,returning a match object,or None if no match was found.在字符串任意一個位置查找正則表達式,如果找到了則返回match object對象,如果查找不到則返回None。

    重點:(1)從字符串中間任意一個位置查找,不像match()是從開頭開始查找;(2)如果查找不到則返回None;

 import re
  string = "ddafsadadfadfafdafdadfasfdafafda"
  m = re.search("a",string)   (1)從中間開始匹配
  print(m)
  print(m.group())
  n = re.search("N",string)   (2)匹配不到的情況
  print(n)

    運行結果如下:

 _sre.SRE_Match object; span=(2, 3), match='a'>  (1)a             (2)None             (3)

    從上面結果(1)可以看出,search(pattern,string,flag=0)可以從中間任意一個位置匹配,擴大了使用范圍,不像match()只能從開頭匹配,并且匹配到了返回的也是一個match_object對象;(2)要想展示一個match_object對象,那么需要使用group()方法;(3)如果查找不到,則返回一個None。

    (4)sub(pattern,repl,string,count=0,flags=0)

def sub(pattern, repl, string, count=0, flags=0):
    """Return the string obtained by replacing the leftmost
    non-overlapping occurrences of the pattern in string by the
    replacement repl. repl can be either a string or a callable;
    if a string, backslash escapes in it are processed. If it is
    a callable, it's passed the match object and must return
    a replacement string to be used."""
    return _compile(pattern, flags).sub(repl, string, count)
 sub(pattern,repl,string,count=0,flags=0)查找替換,就是先查找pattern是否在字符串string中;repl是要把pattern匹配的對象,就要把正則表達式找到的字符替換為什么;count可以指定匹配個數,匹配多少個。示例如下:
 import re
  string = "ddafsadadfadfafdafdadfasfdafafda"
  m = re.sub("a","A",string) #不指定替換個數(1)
  print(m)
  n = re.sub("a","A",string,2) #指定替換個數(2)
  print(n)
  l = re.sub("F","B",string) #匹配不到的情況(3)
  print(l) 

    運行結果如下:

    ddAfsAdAdfAdfAfdAfdAdfAsfdAfAfdA        --(1)
  ddAfsAdadfadfafdafdadfasfdafafda        -- (2)
  ddafsadadfadfafdafdadfasfdafafda        --(3)

    上面代碼(1)是沒有指定匹配的個數,那么默認是把所有的都匹配了;(2)處指定了匹配的個數,那么只匹配指定個數的;(3)處要匹配的正則pattern不在字符串中,則返回原來的字符串。

    重點:(1)可以指定匹配個數,不指定匹配所有;(2)如果匹配不到會返回原來的字符串;

    (5)subn(pattern,repl,string,count=0,flags=0)

def subn(pattern, repl, string, count=0, flags=0):
    """Return a 2-tuple containing (new_string, number).
    new_string is the string obtained by replacing the leftmost
    non-overlapping occurrences of the pattern in the source
    string by the replacement repl. number is the number of
    substitutions that were made. repl can be either a string or a
    callable; if a string, backslash escapes in it are processed.
    If it is a callable, it's passed the match object and must
    return a replacement string to be used."""
    return _compile(pattern, flags).subn(repl, string, count)

    上面注釋Return a 2-tuple containing(new_string,number):返回一個元組,用于存放正則匹配之后的新的字符串和匹配的個數(new_string,number)。

 import re
  string = "ddafsadadfadfafdafdadfasfdafafda"
  m = re.subn("a","A",string) #全部替換的情況 (1)
  print(m)
  n = re.subn("a","A",string,3) #替換部分 (2)
  print(n)
  l = re.subn("F","A",string) #指定替換的字符串不存在 (3)
  print(l)

    運行結果如下:

    ('ddAfsAdAdfAdfAfdAfdAdfAsfdAfAfdA', 11)     (1)
  ('ddAfsAdAdfadfafdafdadfasfdafafda', 3)      (2)
  ('ddafsadadfadfafdafdadfasfdafafda', 0)       (3)

    從上面代碼輸出的結果可以看出,sub()和subn(pattern,repl,string,count=0,flags=0)可以看出,兩者匹配的效果是一樣的,只是返回的結果不同而已,sub()返回的還是一個字符串,而subn()返回的是一個元組,用于存放正則之后新的字符串,和替換的個數。

    (6)split(pattern,string,maxsplit=0,flags=0)   

 def split(pattern, string, maxsplit=0, flags=0):
    """Split the source string by the occurrences of the pattern,
    returning a list containing the resulting substrings. If
    capturing parentheses are used in pattern, then the text of all
    groups in the pattern are also returned as part of the resulting
    list. If maxsplit is nonzero, at most maxsplit splits occur,
    and the remainder of the string is returned as the final element
    of the list."""
    return _compile(pattern, flags).split(string, maxsplit) 
 split(pattern,string,maxsplit=0,flags=0)是字符串的分割,按照某個正則要求pattern分割字符串,返回一個列表returning a list containing the resulting substrings.就是按照某種方式分割字符串,并把字符串放在一個列表中。實例如下:
 import re
  string = "ddafsadadfadfafdafdadfasfdafafda"
  m = re.split("a",string) #分割字符串(1)
  print(m)
  n = re.split("a",string,3) #指定分割次數
  print(n)
  l = re.split("F",string) #分割字符串不存在列表中
  print(l)

    運行結果如下:

 ['dd', 'fs', 'd', 'df', 'df', 'fd', 'fd', 'df', 'sfd', 'f', 'fd', '']  (1)
['dd', 'fs', 'd', 'dfadfafdafdadfasfdafafda']        (2)
['ddafsadadfadfafdafdadfasfdafafda']          (3)

    從(1)處可以看出,如果字符串開頭或者結尾包括要分割的字符串,后面元素會是一個"";(2)處我們可以指定要分割的次數;(3)處如果要分割的字符串不存在列表中,則把原字符串放在列表中。

    (7)findall(pattern,string,flags=)

def findall(pattern, string, flags=0):
    """Return a list of all non-overlapping matches in the string.
    If one or more capturing groups are present in the pattern, return
    a list of groups; this will be a list of tuples if the pattern
    has more than one group.
    Empty matches are included in the result."""
    return _compile(pattern, flags).findall(string)
 findall(pattern,string,flags=)是返回一個列表,包含所有匹配的元素。存放在一個列表中。示例如下:
 import re
  string = "dd12a32d46465fad1648fa1564fda127fd11ad30fa02sfd58afafda"  
  m = re.findall("[a-z]",string)  #匹配字母,匹配所有的字母,返回一個列表(1)
  print(m)
  n = re.findall("[0-9]",string)  #匹配所有的數字,返回一個列表   (2)
  print(n)
  l = re.findall("[ABC]",string)  #匹配不到的情況      (3)
  print(l)

    運行結果如下:

 ['d', 'd', 'a', 'd', 'f', 'a', 'd', 'f', 'a', 'f', 'd', 'a', 'f', 'd', 'a', 'd', 'f', 'a', 's', 'f', 'd', 'a', 'f', 'a', 'f',   'd', 'a']  (1)
  ['1', '2', '3', '2', '4', '6', '4', '6', '5', '1', '6', '4', '8', '1', '5', '6', '4', '1', '2', '7', '1', '1', '3', '0', '0',   '2', '5', '8']  (2)
 []     (3)

    上面代碼運行結果(1)處匹配了所有的字符串,單個匹配;(2)處匹配了字符串中的數字,返回到一個列表中;(3)處匹配不存在的情況,返回一個空列表。

    重點:(1)匹配不到的時候返回一個空的列表;(2)如果沒有指定匹配次數,則只單個匹配。

    (8)finditer(pattern,string,flags=0)

def finditer(pattern, string, flags=0):
    """Return an iterator over all non-overlapping matches in the
    string. For each match, the iterator returns a match object.
    Empty matches are included in the result."""
    return _compile(pattern, flags).finditer(string)
 finditer(pattern,string)查找模式,Return an iterator over all non-overlapping matches in the string.For each match,the iterator a match object.

    代碼如下:

 import re
  string = "dd12a32d46465fad1648fa1564fda127fd11ad30fa02sfd58afafda"
  m = re.finditer("[a-z]",string)
  print(m)
  n = re.finditer("AB",string)
  print(n) 

    運行結果如下:

callable_iterator object at 0x7fa126441898>   (1)
  callable_iterator object at 0x7fa124d6b710>   (2)

    從上面運行結果可以看出,finditer(pattern,string,flags=0)返回的是一個iterator對象。

    (9)compile(pattern,flags=0)

 def compile(pattern, flags=0):
    "Compile a regular expression pattern, returning a pattern object."
    return _compile(pattern, flags)

    (10)pruge()

 def purge():
    "Clear the regular expression caches"
    _cache.clear()
    _cache_repl.clear() 

    (11)template(pattern,flags=0)

def template(pattern, flags=0):
    "Compile a template pattern, returning a pattern object"
    return _compile(pattern, flags|T) 

    正則表達式:

    語法: 

 import re
  string = "dd12a32d46465fad1648fa1564fda127fd11ad30fa02sfd58afafda"
  p = re.compile("[a-z]+")  #先使用compile(pattern)進行編譯
  m = p.match(string)   #然后進行匹配
  print(m.group()) 

    上面的第2 和第3行也可以合并成一行來寫:

 m = p.match("^[0-9]",'14534Abc')

    效果是一樣的,區別在于,第一種方式是提前對要匹配的格式進行了編譯(對匹配公式進行解析),這樣再去匹配的時候就不用在編譯匹配的格式,第2種簡寫是每次匹配的時候都要進行一次匹配公式的編譯,所以,如果你需要從一個5w行的文件中匹配出所有以數字開頭的行,建議先把正則公式進行編譯再匹配,這樣速度會快點。

    匹配的格式:

    (1)^   匹配字符串的開頭

 import re
  string = "dd12a32d41648f27fd11a0sfdda"
  #^匹配字符串的開頭,現在我們使用search()來匹配以數字開始的
  m = re.search("^[0-9]",string) #匹配字符串開頭以數字開始  (1)
  print(m)
  n = re.search("^[a-z]+",string) #匹配字符串開頭以字母開始,如果是從開頭匹配,就與search()沒有太多的區別了 (2)
  print(n.group())

    運行結果如下:

    None
  dd

    在上面(1)處我們使用^從字符串開頭開始匹配,匹配開始是否是數字,由于字符串前面是字母,不是數字,所以匹配失敗,返回None;(2)處我們以字母開始匹配,由于開頭是字母,匹配正確,返回正確的結果;這樣看,其實^類似于match()從開頭開始匹配。

    (2)$  匹配字符串的末尾

import re
  string = "15111252598"
  #^匹配字符串的開頭,現在我們使用search()來匹配以數字開始的
  m = re.match("^[0-9]{11}$",string)
  print(m.group())

    運行結果如下:

    15111252598

    re.match("^[0-9]{11}$",string)含義是匹配以數字開頭,長度為11,結尾為數字的格式;

    (3)點(·)   匹配任意字符,除了換行符。當re.DoTALL標記被指定時,則可以匹配包括換行符的任意字符

 import re
  string = "1511\n1252598"
  #點(·)是匹配除了換行符以外所有的字符
  m = re.match(".",string) #點(·)是匹配任意字符,沒有指定個數就匹配單個  (1)
  print(m.group())
  n = re.match(".+",string) #.+是匹配多個任意字符,除了換行符    (2)
  print(n.group())

    運行結果如下:

    1
  1511

    從上面代碼運行結果可以看出,(1)處點(·)是匹配任意字符;(2)處我們匹配任意多個字符,但是由于字符串中間包含了空格,結果就只匹配了字符串中換行符前面的內容,后面的內容沒有匹配。

    重點:(1)點(·)匹配除了換行符之外任意字符;(2).+可以匹配多個任意除了換行符的字符。

    (4)[...]   如[abc]匹配"a","b"或"c"

    [object]匹配括號中的包含的字符。[A-Za-z0-9]表示匹配A-Z或a-z或0-9。

 import re
  string = "1511\n125dadfadf2598"
  #[]匹配包含括號中的字符
  m = re.findall("[5fd]",string) #匹配字符串中的5,f,d
  print(m)

    運行結果如下:

    ['5', '5', 'd', 'd', 'f', 'd', 'f', '5']

    上面代碼,我們是要匹配字符串中的5,f,d并返回一個列表。

    (5)[^...]   [^abc]匹配除了abc之外的任意字符

 import re
  string = "1511\n125dadfadf2598"
  #[^]匹配包含括號中的字符
  m = re.findall("[^5fd]",string) #匹配字符串除5,f,d之外的字符
  print(m)

    運行如下:

    ['1', '1', '1', '\n', '1', '2', 'a', 'a', '2', '9', '8']

    上面代碼,我們匹配除了5,f,d之外的字符,[^]是匹配非中括號內字符之外的字符。

    (6)*   匹配0個或多個的表達式

 import re
  string = "1511\n125dadfadf2598"
  #*是匹配0個或多個的表達式
  m = re.findall("\d*",string) #匹配0個或多個數字
  print(m)

    運行結果如下:

    ['1511', '', '125', '', '', '', '', '', '', '', '2598', '']

    從上面運行結果可以看出(*)是匹配0個或多個字符的表達式,我們匹配的是0個或多個數字,可以看出,如果匹配不到返回的是空,并且最后位置哪里返回的是一個空("")。

    (7)+      匹配1個或多個的表達式

 import re
  string = "1511\n125dadfadf2598"
  #(+)是匹配1個或多個的表達式
  m = re.findall("\d+",string) #匹配1個或多個數字
  print(m)

    運行如下:

    ['1511', '125', '2598']

    加(+)是匹配1個或多個表達式,上面\d+是匹配1個或多個數字表達式,至少匹配一個數字。

    (8)?     匹配0個或1個的表達式,非貪婪方式

 import re
  string = "1511\n125dadfadf2598"
  #(?)是匹配0個或1個的表達式
  m = re.findall("\d?",string) #匹配0個或1個的表達式
  print(m) 

     運行結果如下:

    ['1', '5', '1', '1', '', '1', '2', '5', '', '', '', '', '', '', '', '2', '5', '9', '8', '']

    上面問號(?)是匹配0個或1個表達式,上面是匹配0個或1個的表達式,如果匹配不到則返回空("")

    (9){n}              匹配n次,定義一個字符串匹配的次數

    (10){n,m}           匹配n到m次表達式

    (11)\w               匹配字母數字

    \w是匹配字符串中的字母和數字,代碼如下:

 import re
  string = "1511\n125dadfadf2598"
  #(?)是匹配0個或1個的表達式
  m = re.findall("\w",string) #匹配0個或1個的表達式
  print(m)

    運行如下:

    ['1', '5', '1', '1', '1', '2', '5', 'd', 'a', 'd', 'f', 'a', 'd', 'f', '2', '5', '9', '8']

    從上面代碼可以看出,\w是用來匹配字符串中的字母數字的。我們使用正則匹配字母和數字。

    (12)\W       \W大寫的W是用來匹配非字母和數字的,與小寫w正好相反

    實例如下:

 import re
  string = "1511\n125dadfadf2598"
  #\W用來匹配字符串中的非字母和數字
  m = re.findall("\W",string) #\W用來匹配字符串中的非字母和數字
  print(m) 

    運行如下:

    ['\n']

    上面代碼中,\W是用來匹配非字母和數字的,結果把換行符匹配出來了。

    (13)\s       匹配任意空白字符,等價于[\n\t\f]

    實例如下:

 import re
  string = "1511\n125d\ta\rdf\fadf2598"
  #\s是用來匹配字符串中的任意空白字符,等價于[\n\t\r\f]
  m = re.findall("\s",string) #\s用來匹配字符串中任意空白字符
  print(m) 

     運行如下:

    ['\n', '\t', '\r', '\x0c']

    從上面代碼運行結果可以看出:\s是用來匹配任意空的字符,我們把空的字符匹配出來了

    (14)\S         匹配任意非空字符

    實例如下:

 import re
  string = "1511\n125d\ta\rdf\fadf2598"
  #\S是用來匹配任意非空字符
  m = re.findall("\S",string) #\S用來匹配日任意非空字符
  print(m) 

      運行如下:

    ['1', '5', '1', '1', '1', '2', '5', 'd', 'a', 'd', 'f', 'a', 'd', 'f', '2', '5', '9', '8']

    從上面代碼可以看出,\S是用來匹配任意非空字符,結果中,我們匹配了任意非空的字符。

    (15)\d     匹配任意數字,等價于[0-9]

    (16)\D     匹配任意非數字

    總結:findall(),split()生成的都是列表,一個是以某個為分隔符,一個是以查找中所有的值。正好相反。

您可能感興趣的文章:
  • Java基于正則表達式實現查找匹配的文本功能【經典實例】
  • 淺析正則表達式中的lastIndex以及預查
  • iOS 正則表達式判斷手機號碼、固話
  • 15/18位身份證號碼驗證的正則表達式總結(詳細版)

標簽:大興安嶺 涼山 泰安 本溪 哈密 湖州 常州

巨人網絡通訊聲明:本文標題《正則表達式(regular)知識(整理)》,本文關鍵詞  正則,表達式,regular,知識,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《正則表達式(regular)知識(整理)》相關的同類信息!
  • 本頁收集關于正則表達式(regular)知識(整理)的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    亚洲欧美综合另类在线卡通| 成人免费精品视频| 国产女人18毛片水真多18| 一级片一级片一级片| 精品国产乱码久久久久久蜜臀| 欧美日韩精品三区| 亚洲欧美欧美一区二区三区| 粉嫩欧美一区二区三区高清影视| 国产精品亚洲视频| 欧美日韩高清丝袜| 精品理论电影在线观看| 看片的网站亚洲| 亚洲精品乱码久久久久久久久久久久| 色婷婷精品大在线视频| 国产精品成人一区二区艾草| 国产成人一区在线| 国产又粗又硬又长又爽| 中文字幕在线视频一区| 99精品桃花视频在线观看| 色香色香欲天天天影视综合网| 欧美v日韩v国产v| 另类中文字幕网| 成人免费视频入口| 国产精品久久三| 不卡一区二区三区四区| 色综合久久久久综合99| 亚洲一区二区中文在线| 五月天激情小说| 精品免费国产一区二区三区四区| 亚洲欧美激情插| 亚洲天堂小视频| 日韩网站在线看片你懂的| 久久超级碰视频| 丝袜国产日韩另类美女| 亚欧色一区w666天堂| 国产综合色精品一区二区三区| 亚洲色图.com| 亚洲一区二区三区视频在线播放| 欧美精品一区视频| 久久九九99视频| 美女诱惑一区二区| 国产一区二区三区综合| 91免费看`日韩一区二区| 亚洲免费高清视频在线| 日韩和欧美的一区| 亚洲色图日韩精品| 亚洲视频香蕉人妖| 中文视频在线观看| 久久久久一区二区三区四区| 成人美女在线观看| 欧美色手机在线观看| 久久国产人妖系列| 91极品视觉盛宴| 免费在线成人网| 91狠狠综合久久久| 午夜视频一区二区| 亚洲人与黑人屁股眼交| 亚洲国产精品麻豆| 蜜桃av免费观看| 亚洲一级二级在线| 女人黄色一级片| 亚洲国产成人av网| 911国产在线| 日日夜夜免费精品| 久久中文免费视频| 日本系列欧美系列| 一本色道久久综合亚洲91 | 中文字幕精品一区二区精品绿巨人| 日韩电影在线一区二区三区| 精品日韩在线视频| 亚洲成人你懂的| 999精品在线视频| 青青草伊人久久| 欧美亚洲动漫制服丝袜| 黑人精品欧美一区二区蜜桃| 欧美日韩一区二区三区高清| 国产麻豆视频精品| 日韩一区二区三区四区五区六区| 蜜臀国产一区二区三区在线播放| 高潮毛片无遮挡| 亚洲一区二区三区国产| 久久久免费看片| 亚洲成人av一区| 欧产日产国产v| 精品一区中文字幕| 91麻豆精品国产91久久久使用方法 | 人妻av无码一区二区三区| 亚洲乱码国产乱码精品精小说 | 91久久精品一区二区| 麻豆91在线看| 欧美男同性恋视频网站| 成人精品一区二区三区四区| 精品对白一区国产伦| www.啪啪.com| 自拍视频在线观看一区二区| 亚洲精品国产91| 日韩电影一二三区| 欧美三区在线视频| 99这里只有久久精品视频| 久久久久国产一区二区三区四区| 不卡av电影在线播放| 久久九九全国免费| 国产又大又粗又爽的毛片| 亚洲3atv精品一区二区三区| 91久久国产最好的精华液| 国产98色在线|日韩| 欧美精品一区男女天堂| 波多野结衣先锋影音| 亚洲五码中文字幕| 欧美少妇一区二区| 久久先锋影音av鲁色资源网| 久久人人妻人人人人妻性色av| 久久奇米777| 全黄一级裸体片| 日韩不卡手机在线v区| 欧美视频一区二区三区在线观看| 精品一区二区在线看| 欧美va亚洲va香蕉在线| 岛国精品资源网站| 一区二区三区不卡视频| 91国偷自产一区二区三区观看| 免费黄网站欧美| 日韩视频在线你懂得| 亚州av综合色区无码一区| 亚洲成人av电影| 91精品国产91久久久久久最新毛片| 国产激情一区二区三区四区| ww久久中文字幕| av在线播放中文字幕| 国产成人三级在线观看| 中文字幕av一区 二区| 顶臀精品视频www| 99久久er热在这里只有精品15| 精品成a人在线观看| 中文字幕第20页| 国产一区二区网址| 国产精品天天看| 男女性高潮免费网站| 白白色亚洲国产精品| 亚洲乱码精品一二三四区日韩在线| 国产视频不卡在线| 国产一区二区三区四| 国产日韩欧美高清| 国产精品成人69xxx免费视频| 免费一级片91| 精品国产凹凸成av人导航| 成人黄色a级片| 国产91在线观看丝袜| 日韩毛片在线免费观看| 欧美视频在线观看一区| 中出视频在线观看| 国产裸体歌舞团一区二区| 国产精品毛片久久久久久| 色婷婷国产精品久久包臀| 337p日本欧洲亚洲大胆张筱雨| 国产精品电影一区二区三区| 色综合久久综合| 怡红院一区二区| 久久av资源网| 国产精品久久久一本精品 | 国产欧美一区二区精品秋霞影院| 在线观看国产免费视频| 精品一区二区免费看| 国产精品福利av| 91精品中文字幕一区二区三区| gogo亚洲国模私拍人体| 日本vs亚洲vs韩国一区三区二区| 欧美日韩精品免费观看视频| 在线免费看黄视频| av亚洲精华国产精华精华 | 国产亚洲成aⅴ人片在线观看| 不卡一区二区在线观看| 国产乱码精品一品二品| 亚洲欧美日韩在线播放| 欧美一区二区三区男人的天堂| 这里只有精品在线观看视频 | 欧美卡一卡二卡三| 白嫩情侣偷拍呻吟刺激| 韩国毛片一区二区三区| 亚洲黄色片在线观看| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 欧美在线视频第一页| 9.1在线观看免费| 国产一区二区久久| 亚洲一区中文日韩| 欧美激情一区二区在线| 欧美人体做爰大胆视频| 国产精品18在线| 91精品啪在线观看国产| 国产成人免费高清| 同产精品九九九| 亚洲少妇30p| 精品国产凹凸成av人网站| 在线精品视频一区二区三四| a级片在线观看| 古装做爰无遮挡三级聊斋艳谭| 亚洲午夜久久久久| 欧美激情在线一区二区三区| 69av一区二区三区| 国产88在线观看入口|