QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1920|回复: 0
打印 上一主题 下一主题

Python正则表达式(一看就懂)

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-7 15:37 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    Python正则表达式(一看就懂)5 I1 `' t+ N  Q4 h( P
    $ S9 }2 o# z  j" s; D
    目录
    ' c" q( G4 k- p  [! t) F- C* j) O
    哈喽O(∩_∩)O😄
    5 O: x0 r+ }( U" W* ]( p) F- m% E4 i! X' F) i
    什么是正则表达式(⊙_⊙)  |: {8 T8 y# y- ^2 c$ Y( E: Y9 R

    1 M# Q; L6 m! N8 y. P* j; |+ z简单说,正则表达式是…
    % k: U& L6 v! O( H8 G; V* g* [# {/ a* {5 R) P9 k4 P
    正则表达式怎么用❓
    ! V# [3 c( Y4 X$ R1 r" C
    0 L/ E$ h- O. ]3 [( h9 n- a( K' f3 Asreach的用法🍊
      k' c! Z) @7 ]# l0 f, o$ i! m! J& W0 J, h; ^
    匹配连续的多个数值🍉
    3 g% E5 E6 _, Y, {' u, @8 B* ^  Z+ f) x4 A. i8 i7 F4 P6 u0 V
    字符"+"重复前面一个匹配字符一次或者多次🍉+ W% t6 [: q& t- H& @$ P: Q3 r0 y7 j

    3 v1 n% M3 b* \% P# x7 i( [' ]5 C; Q字符"*"重复前面一个匹配字符零次或者多次🍉
      F& k1 @3 U) k0 U* y" @; ]( r* ?" j0 C6 Q
    字符"?"重复前面一个匹配字符零次或者一次🍉* {& e5 J# l5 w* o, f8 z2 ]

    ; k  J. _# J7 v: C! |特殊字符使用反斜杠"“引导,例如”\r"、"\n"、"\t"、"\"分别表示回车、换行、制表符号与反斜线自己本身6 R, W0 q* h6 p" K: k) ]' t7 t4 |

    , M8 F. f* t& L
    - ]/ [7 G% r  I+ f2 z; w3 n" e4 n" A! [! z* {* L2 E1 h
    完整表🔍
    ; ]: l6 i* Z! n9 z8 Z9 b6 A. n9 j: {4 f( A: t: y8 \0 u/ U
    match用法🤔  T' b- |$ b7 P& j# a% V+ R* F

      i9 O4 Q( \& Dmatch用法😃
    , s+ s4 k' e5 e* D) Y0 ]
    9 b( s2 a; J3 f match对象🍊
    7 n: D: j0 @$ B) X/ j1 t3 U" j; p
      M; [; B( {2 }# g. I& j; ^数量词🍊
    , e8 ~7 b$ a9 W* P2 Z% `* G+ N3 P1 k2 a* q5 l' F. J
    匹配开头、结尾🍊# ]5 w. V2 }* C) p: j: n2 }
    $ x3 A  B/ n) M* n8 z! Z
    , b1 R: f7 u! C5 h+ i

    3 j9 I( j# c) Q* i- @ 匹配分组🔍* R1 X' _/ t8 e* q, I! {4 }
      d3 W/ s" R: W7 S  n
    match总结😄
    ' v5 O6 m1 s3 y1 e7 X( @5 ?7 c, o/ G1 t1 B
    实践出真知 凸(`0′)凸 ☀️
    + f7 G3 \8 Y; w
    4 y" Q$ S3 G9 z# c写在最后🧐
    . h! }- C0 p6 |6 ?  z- V
    7 N9 R' c; |5 W+ o: C( \哈喽O(∩_∩)O😄& d: @5 c$ D, ]% E( l
    今天来发一下python正则表达式,其实这个也是比较简单的: w/ k6 ^& W( q# H9 H& x

    * \( q8 R" J' B  L肝了好几个小时才写出来呀
    1 r' |- d/ ^0 B. {. ?3 N
    6 _5 \/ X2 t2 d& E; D什么是正则表达式(⊙_⊙)
    ; Q- z6 d# n* X# f. T6 T目前越来越多的网站、编辑器、编程语言都已支持一种叫“正则表达式”的字符串查找“公式”,有过编程经验的同学都应该了解正则表达式(Regular Expression 简写regex)是什么东西,它是一种字符串匹配的模式(pattern),更像是一种逻辑公式。/ T! ]3 P) X8 S/ |, _8 P
    + e1 p6 Q3 s. N$ g
    简单说,正则表达式是…
    & |# C' [4 }& V3 N) b9 spython中必备的工具,主要是用来查找和匹配字符串的。
    ' |5 `# l  q2 {; {* }4 y7 l! B' d. x( J! \2 q8 F+ |0 \0 q
    正则表达式尤其在python爬虫上用的多。
    $ _5 ]2 @) e8 U/ f7 J+ n' }! I" x1 T
    正则表达式怎么用❓
    , n, n; B3 r+ E3 M1 Z. p8 J5 F首先,我们要导入头文件(写c++写习惯了)模块9 t$ V4 ?( j+ e9 t; F
    6 ~, t* q( v( q3 ^" {) p; f3 R
    import re. b9 V! I/ S% x9 e
    因为re是内置模块,所以不需要额外安装,就很银杏1 x4 k" j! o5 e( ^* u' y6 ~& u5 L) v
    ) j. ]8 m: a. {: k
    sreach的用法🍊
    0 y/ ~* T/ d4 U, n+ G0 s! y匹配连续的多个数值🍉
    * N, _; @+ j* U4 w3 W- `" y* ~# X! Q3 i$ l3 }7 k3 a

    5 `" v/ }1 {8 h6 T% w  iimport re
    ) P2 L$ j; p9 I9 a" _3 M- q! ~, u3 }& K9 ?; r( a- A- H8 P
    r=r"\d+"
    - B  c3 `. A; m2 M  ~0 n  Q& Mm=re.search(r,"YRYR567eruwgf")#目标是567
    / `5 y4 m4 y5 G# H. U# E: t! Kprint(m)( b: V0 @5 k# h
    7 D* z, k3 i3 c& g3 n) [
    re模块中,r“\d+”正则表达式表示匹配连续的多个数值,search是re中的函数,从"YRYR567eruwgf"字符串中搜索连续的数值,得到"567"5 Z- t/ I+ a* }* l
    . R$ [, `: O/ i5 D
    结果:; b% K0 e* R; n2 x
    / O7 C- J' Z7 {" D' ~( X

    3 R# x& P9 Y: v2 ~) g: v- [6 ~& a, _
    / C* E7 Z, ]" w  `* n可以看到,搜索到了连续值“567”
    " O) R1 E* `0 J% V6 h" ^# b# i4 F- ~: V& f1 {
    字符"+"重复前面一个匹配字符一次或者多次🍉' r8 A% Q% o. B2 Z) b( e( O; {
    2 g6 a4 U2 v6 n' z. F' O
    - k$ f2 r) V# h8 {8 ^& O
    import re
    $ c% w. X0 T4 N$ G: x' |. x; J: _3 u: G- ~
    r=r"b\d+"
    6 h- m9 |5 _+ G3 b. M8 A0 @$ Nm=re.search(r,"a12b1233cd")8 d) m9 O, s/ s, y7 H5 c
    print(m)
    ( L$ M! m& @3 Q+ E+ J7 X! i
    9 R& X7 `4 }8 E/ U9 [& a9 { 这样,结果就是b后面的连续数字+ k) l3 f2 N! ~. {
    * w+ F4 h1 o  l% U: g1 a  f
    结果:
    3 F- L7 S. r* e# B7 @& {3 Y. X

    ; E  W9 D- ~& Z. B& B0 u2 `6 |. r! J1 n  W& N# P
    字符"*"重复前面一个匹配字符零次或者多次🍉
    $ |5 s/ }$ L: ]! b8 ^# g“*" 与 "+"类似,但有区别,列如:  p$ y6 c* O, D7 [
    可见 r"ab+“匹配的是"ab”,但是r"ab “匹配的是"a”,因为表示"b"可以重复零次,但是”+“却要求"b"重复一次以上: P0 S+ L( i# h9 B' H

    7 k) g& w& \1 {' I8 o: [* r$ f1 X1 l

    % p% s/ H. C+ ^+ ?' e. q: Simport re' F! Z* w: `' x4 }  J

    ) {, @# d) K0 B0 b, tr=r"ab+"# Q" K  e" w6 N% P4 o
    m=re.search(r,"acabc"); `0 _, D  ?8 R- t
    print(m)
    7 O6 m. V: B. ~% w0 p) `) t' k. a" B& }4 p( _8 G+ k9 U
    r=r"ab*"# O6 M3 G4 ^6 T2 {$ [2 o. O, ?# L
    m=re.search(r,"acabc")( l0 q( j; l) I! Q
    print(m)( a7 P8 g% r0 |& D9 ?
    结果:
    0 m4 Z8 o" x+ s! Y1 l) f1 j- }% ~! a* D: v! u+ \3 J+ i7 _

    ! P! t% \  C" }3 s! \/ F
    1 k6 Z0 n1 u% Y. P字符"?"重复前面一个匹配字符零次或者一次🍉( }6 f% G8 {# T# b4 \, H
    匹配结果"ab”,重复b一次 # R) a; {9 I- L0 _1 r5 `3 {9 Q

    / u0 l' W: ]# S! Y, V# v
    & m, }5 b  {9 j8 ]. g1 F
    6 Q/ \& y9 r2 i& t$ Kimport re
    . _+ n; D- I2 J3 {
    - i) o- Y! o$ z1 l# C; d6 {6 Er=r"ab?"8 v7 Z8 ~& t7 s3 o
    m=re.search(r,"abbcabc")  U7 Q! D# Z1 u  r& \* I
    print(m)
    : `7 ]5 \! \9 c6 i6 x4 \/ L" @ 结果:1 x3 F& T5 B6 g4 E' h
    ; E) _( Y9 j# k' v, i

    ; D- [1 s; Q+ X& b9 f/ l5 D- D3 W% ?$ F! ~; z
    特殊字符使用反斜杠"“引导,例如”\r"、"\n"、"\t"、"\"分别表示回车、换行、制表符号与反斜线自己本身2 T% D' M" z  |$ x
    & M9 T2 f4 {+ k6 ~( k9 }
    import re
    1 v* j& J5 W' j. y# ], W- ?; q; J$ ]0 f; n
    r=r"a\nb"
    " R' c3 Y+ [( Gm=re.search(r,"ca\nbcaba")
    : G4 J$ e! m% r0 }" ~; ]print(m)  Y' |  N4 \4 B, o
    结果:6 n+ q/ p! Q7 D3 g

    . @. Q. u4 L& U3 T7 C  u! r
    - q" N; G9 h( y. @3 C+ ?! G
    " Z& i) i8 B' M) F$ x/ }- H$ {4 d 完整表🔍1 d$ u+ A3 w( w3 E) v2 [5 d  v( J
    其实上面说这些都是比较基础,比较简单的,还有复杂一点的,都在这张表里
    - @0 E: ^' E$ l) k
    ' l( [4 z, E5 ]& w& F
    2 H" A: \6 G& I) R! T/ u
    ) [4 z2 {# S8 ?9 ]; [% e match用法🤔
    ! _4 f4 N. d. a  Q/ d9 u3 I! n% lmatch用法😃$ S; c" S& `; I2 }, B. Z
    语法:re.match(pattern, string[, flags])  ! X$ ?! A. C. F# O1 M' v9 w
    " w) w! J. D0 [# e
    从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。
    4 u6 Y/ e; `1 M, G! }
    : N* s8 V" G0 a5 Q+ p+ @# o#示例:
    . I( H2 x4 ]* Wname='张三'
    ( {* @, q9 f2 R( Oif re.match('张\w+',name):
    9 a: }* c' p+ ~& s0 f: c    print('{},你好!'.format(name))# `% J  x6 p* d9 ~/ q
        # 张三,你好!
    1 S, A/ i* F2 R4 H7 M( W输出结果:张三,你好
    0 [  y  }; p& x; m1 |( ^+ k/ g; r% j+ ~# ]* R
    3 H  `3 E% J7 {  s7 Z

    8 z' T/ m6 @, I! R- u张三:谁叫我?
    / ^" L+ j. s6 R# J
    0 D: O0 K$ T+ U$ ^" L不开玩笑了,继续
    " M+ z/ H: H2 @. X
    / T6 y( `( [, C0 E3 @- m' S, A总的来说,match就是1 A0 @. o* Z7 y7 I% Q4 }
    ; ]- j9 d: g, o2 v2 l) R
    返回匹配的match对象
    ! C( Q3 o, R$ e& w: s. L默认从给定字符串的开头开始匹配、即使正则表达式没有用^声明匹配开头) V( V: i7 Z: i4 H) ^) }
    match对象🍊
    ' T9 d3 M; {8 G" c) zMatch对象的几个属性:
    % ]( c2 x  C3 M  F+ n: L- }- e
    ; K+ z9 Y9 m/ ]: a# O' W注意,前面是有“.”的1 a9 b  ?: ?7 y
    1..string 待匹配的文本
    . w- P1 \3 y# a; R( |2..re 匹配使用的pattern对象
    # n" @% B# e% `! O# i; d* r3..pos 正则表达式搜索文本的开始位置
    7 X( W' R3 s, E% H5 ]2 A, G1 u4..endpos 正则表达式搜索文本的结束位置
    ' N7 M0 w' L0 c0 rMatch对象的几个方法: 6 x' Z. {! Y( M3 x: |6 S
    1.group(0) 返回匹配到的子串% e" `2 [1 N& J
    2.start() 返回匹配子串的开始位置
    9 S9 B" |- `6 O3 [3.end() 返回匹配子串的结束位置# O8 h! @: |3 C" F, I
    4.span() 返回start()、end(), `% F! ?# U8 g3 C
    3 r5 A7 b( S9 t3 R
    数量词🍊4 c2 A4 M4 D1 b9 {
    . j3 C5 @2 J2 y; ?
    # X! F# G& i1 x7 L6 E8 l( Y
    匹配开头、结尾🍊2 J6 g, c  k1 t

      C9 \4 P% {3 v; n 匹配分组🔍( i) a; F1 i9 b" d

    - \5 z! J" P! @  j' h/ H9 R
    " T$ U) |/ j  n. V好了,看了上面几张表,其实我觉得最重要的在下面  
    " c1 W. ^: r; O! S/ [7 Z* I! s5 B( U
    match总结😄8 r, A( ~& E) r0 q$ z. U
    其实没啥好总结的,但你要看懂这张图,这个很重要7 x' T; l8 t. `# j
    ' Z3 Z  ?" b  f% ^1 b+ N" c3 o

    # c& ]4 i0 s, a" F: z7 g
    " A  h, r1 R. Z6 w4 r8 W 我框出来的是我自己感觉经常用的# a4 v/ H- \* `* K. l

    2 L! k% z) S) e1 F其实我自己刚学的时候也听不懂,现在觉得可简单了
    1 l' }& K4 b6 _$ g# V5 o  y
    . a. ]5 f5 G# ?% E/ n" I+ t所以,你应该现在就觉得很简单吧?
    / y$ R2 t! l& {4 X  y
    3 }3 U# d/ z1 u3 T# j' Q: U但是,正则表达式的字符很多,容易记混,一不小心就好几十个报错,很让人崩溃
    ; B9 G7 Z! J9 [2 J; i8 |1 _' G2 z+ U! s6 q

    # O2 h% I0 ?0 W. ~0 T# D& y4 E+ t0 C. n( E# E1 U* Q
    实践出真知 凸(`0′)凸 ☀️! @) ]8 o9 H" W. u" H
    学了这么多,是不是想撸个程序了?4 J* T6 i5 x4 O
    9 {3 D2 n. R  Y7 S6 P
    已经给你准备好了
    # T& V! Y& ^8 P1 I6 S3 g9 t# o0 C; c; A" D0 I+ b! n% h! m
    程序效果:输入手机号,通过正则表达式判断手机号合不合法,) U5 F: `6 k; j! H3 w

    3 E' X, P. Z1 I如果合法,就输出这个手机号的信息(所属地等)9 d4 w  Z" ?& ~: \% ?
    ' k' s9 C1 l, D5 E. c6 `* F
    如果不合法,就重新输入,简单吧?
    5 E8 r; S9 d5 A# _7 C* |
    $ Y, O3 @, G6 s- f这里我想重点说一下怎么获取手机号的信息
    % Y+ C" @7 r' I: L: D4 d' D- `* F3 n8 `. Q4 J$ _
    我一开始打算上网上百度一波的,没想到直接复制过来23个报错、我也是醉了
    # B$ t& N* [/ H- n" o* r+ h/ I! l, H7 l1 C: S" s7 c" O9 `

    & [9 H0 {( }1 i# }8 ?- m
    / T) d* f5 s1 j7 ~* P哎呀,不能再发表情包了
    - N: ?- [# z" n2 h$ @( }! ]4 Q& T* e9 Z* E; N$ E/ }
    9 r4 f4 b8 z5 m5 y5 v/ b
    0 ?! w2 L" B# i2 g" ]. G
    ε=(′ο`*)))唉,还是自己写吧、、、
    - C6 E6 z( I" s+ I6 Q/ ^# k3 z7 s, R+ {6 W4 f& i0 C
    我想起了有个模块叫phone,可以实现这个功能" v9 Y0 R6 l1 S. a/ t
    ) f8 C7 ~+ n- l8 z" C) n  ]- Q
    但是你可能还没有安装这个模块,要按命令行模式下输入pip install phone- U4 W$ a: f$ y+ t) Z3 ?( Z& w

    * G5 q1 {; v  L' k/ ]* _/ a0 }等个六六四十九秒就下载下来了3 w" c- q# C' A# S0 c

    3 d4 ~* h. G. |& P' r4 j6 h- [然后你就可以体验一下了
    ( a, `, ?. b, p9 D& D& G( i, V' z9 q& t, Z2 n6 H
    代码(PyCharm运行通过)
    5 V/ F) G' t6 ~/ @' j, n5 A+ o0 k& n% g7 k5 i! Q' N
    import phone9 d% k' m, Y9 j
    from time import *% d3 v) J: ^7 S( K6 i1 e
    import re
    $ G! b) V7 r" d) K' W0 L( h& F) L4 E: l+ g- y
    def begin():
    ; n1 {4 x% x6 \: b3 g4 V4 \    print("欢迎来到查询小程序")
    2 D) c9 Y7 e: a    print("1.查询")
    ; c/ K; Z9 C7 g0 ?    print("2.用户")
    + W8 f" E7 V9 @' B5 L8 q: ]4 _; L" |
    3 m$ G4 j. C3 @2 }
    def p(n):
    1 S& w0 ^( ?8 {' D) H    if re.match(r'1[3,4,5,7,8]\d{9}', n):
    7 Q3 X5 M, G# v& ]; @" T        if re.match(r'13[0,1,2]\d{8}', n) or \- A' z+ X# v8 i4 }* y) T- n$ a
                    re.match(r"15[5,6]\d{8}", n) or \
    5 Z& E0 e" c+ l1 A+ h* _8 I3 ]& M                re.match(r"18[5,6]", n) or \7 B9 N6 T! {( L- M
                    re.match(r"145\d{8}", n) or \
    6 D" y5 L8 T0 ?, u6 g& v                re.match(r"176\d{8}", n):
    , p4 U& J+ i; Y            return True
    2 o; i( j4 N7 ?9 O5 I        elif re.match(r"13[4,5,6,7,8,9]\d{8}", n) or \5 t" X& M$ n1 l# Q, }
                    re.match(r"147\d{8}|178\d{8}", n) or \
    9 }1 G2 S; _+ |9 i2 }, E' F, j$ M/ }                re.match(r"15[0,1,2,7,8,9]\d{8}", n) or \
    " |, u% G$ r8 N6 i                re.match(r"18[2,3,4,7,8]\d{8}", n):
    8 r% ]/ V$ {" p( J0 N1 W2 S            return True
    1 m+ A# p3 j4 D, C        else:
    2 f& U0 y: ?/ u# f$ Q            return True4 X" n2 `. V5 L$ l' l7 p8 d
        else:
    ) w3 Y( J. U# G        return False& {. c5 t. Y! `% G5 f8 r

    ( B% \& d* Q# }5 |9 oif __name__ == "__main__":$ R, V1 s' o3 y; y* ~5 D: x! v2 k$ E
        s=0
    5 _; ?( `. \+ j$ T5 W6 h, J' P  s0 I! I    begin()
    / c+ f( a7 n8 S0 G, t* C! Z) x    while True:& S5 r4 e& z$ L: @2 h" [& s* a8 W) v
            op = int(input("请输入:"))
    + [& k& B: n; `2 h: B, E        if op==1:
      F  J" N& N) _3 P" T# e6 l7 x1 Z$ T            phoneNum = str(input("请输入你的电话号码"))) c/ _6 E6 I) y& p5 g/ W) f3 p
                if p(phoneNum)==False:
    9 o$ I  P" K- k2 v  m8 m                print("该手机号无效")4 ?& H0 R" i- I3 u% ]
                    for i in range(100):
    0 w9 \6 L5 F8 l' W* p* n                    print('\n')
    ' c5 ^, Z/ L/ \: B                begin()
    & h& S- M- w: Q  ~4 [1 A% H: @            else:
    & N  i8 Q( y3 @5 V8 `- ^, L4 o/ `                info = phone.Phone().find(phoneNum)3 f% g. Y1 m* ]* l
                    print("手机号码:"+str(info["phone"]))4 e' v# Q  E# o; l) @8 N
                    print("手机所属地:"+str(info["province"])+"省"+str(info["city"])+"市")1 j& P5 s- F3 k
                    print("邮政编号:"+str(info["zip_code"])). |4 y, J6 z$ \1 G3 U- Z
                    print("区域号码:"+str(info["area_code"]))
    ; `; s# Z- j8 g                print("手机类型:"+str(info["phone_type"]))& D! K+ M+ u) f0 L' G  I. u
                    s+=1
    4 I, I3 ?; j' r- l! o( W                i = input("输入任意数退出...")
    & M4 \( j7 @0 [9 H1 r                for i in range(100):
    $ Y( t$ `" j- k                    print('\n')
    3 J: m" h; @' V- M0 D( q4 r                begin()
    - l; O" \5 R$ a4 y" M1 p1 i        if op==2:. b2 e" h1 e# i! l1 x
                print("使用次数:"+str(s))( W8 n; p0 }* X( j& n
                i = input("输入任意数退出...")
    / l$ Z/ O& P- ~            for i in range(100):6 }" v; e1 l' A7 p* A
                    print('\n')9 Y$ h* L6 Z% w) S
                begin()
    $ V* e. r2 y& F, P1 G; t% [/ `, q$ ~
    & r3 e8 n3 j$ w* `% E写在最后🧐
    / a; u( x% K( S6 |————————————————0 }- Z0 C; Y, A8 Q( P
    版权声明:本文为CSDN博主「YR_T」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ' R  h! K" V0 O原文链接:https://blog.csdn.net/m0_64036070/article/details/123853489, U9 c1 e9 E# S6 M! ~* @) n
    8 |. A) W& W& ]3 U1 T5 r, E

    - J0 H2 L' n+ H1 u: s$ a) W& x
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-11 15:32 , Processed in 0.426963 second(s), 51 queries .

    回顶部