QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1941|回复: 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正则表达式(一看就懂)
    % L- R9 c  A- z
    $ I3 N& S9 Z* @/ N* n目录
    + l4 U4 R, a  Z5 Y6 `" t
    & \' q9 Y2 O1 ^$ \7 d哈喽O(∩_∩)O😄
    % {0 r! p3 v8 X. H- b% \% k
    ) e7 R' X: @1 c' x1 A1 R什么是正则表达式(⊙_⊙)
    ( s# S; h. x. h) d( n/ x9 F8 D; I9 m
    简单说,正则表达式是…' j) `" R8 c2 s
    5 o. g$ K) @: U- r4 d' [
    正则表达式怎么用❓
    + \2 x8 P: f2 s! y9 ]2 J, G5 M/ p) {
    sreach的用法🍊
    0 Y2 G  ?1 w3 J8 k/ a: e* M' E: J, \
    匹配连续的多个数值🍉
    6 d" k4 a* [& S" t* l* X- ^0 B  b$ G' [" w0 n
    字符"+"重复前面一个匹配字符一次或者多次🍉
    / O' \* }) A& @2 T& P8 I1 i3 @! W, ]  g8 m9 m
    字符"*"重复前面一个匹配字符零次或者多次🍉
    1 j( C3 V4 W, Y* H3 M
    # Y% ]- [7 `* H5 l8 Z; h9 M$ U8 y字符"?"重复前面一个匹配字符零次或者一次🍉
    0 w  A( p  P9 O6 D( c' m
    & A% N9 g6 w( ]2 N, f0 {# n特殊字符使用反斜杠"“引导,例如”\r"、"\n"、"\t"、"\"分别表示回车、换行、制表符号与反斜线自己本身' Q! o# ~' X6 [' }* j
    * r5 |! d2 s7 J
    9 @% \/ q* V- }* x2 c: L

    7 |0 F0 e! }9 H8 G' b 完整表🔍
    # c' _' B1 o- B. L, f" O
      J) G4 T2 E# x1 n match用法🤔, ?& b/ u0 B5 o4 l

    ' Z' P- Z5 G+ ?$ @4 Umatch用法😃
    % s7 ~; M+ h8 o4 V  j8 S  y4 c! c& u5 x: l% Z4 `* v
    match对象🍊' k# P7 V7 I2 g

    * n( d( i1 u! }" E: [8 P数量词🍊/ c% ?' i: C0 \

    4 J( A8 U! q/ j7 a匹配开头、结尾🍊
    $ D; p) y, ~. ]' ~
    : L% j/ R9 [7 q: r" w; g3 F$ g& p
    0 D! h/ W3 t: ]7 h
    匹配分组🔍
    & z' x& j9 ?$ ?6 a# ]$ G& v8 I0 a; `, ]4 p2 m( V) k5 @( L( k* P
    match总结😄
    ! d) q; h8 t+ m$ \0 Y8 D, {8 h/ C, X2 w; j$ v2 c4 R1 T6 Q. W$ g
    实践出真知 凸(`0′)凸 ☀️
      L: I  C- y: f: w5 q$ T/ V, _0 Q: J6 T0 l1 x
    写在最后🧐* w+ E& I3 T% M. ?# Y2 e) b

    " b9 Q, ~* B. T' e哈喽O(∩_∩)O😄
    & y" d3 J& s0 g; c" A. F0 ?今天来发一下python正则表达式,其实这个也是比较简单的- K& F) L- m  I5 P
    * |! c# `3 V! U3 ?0 P, ?' P
    肝了好几个小时才写出来呀1 c) J2 G7 e" m) R. ]

    : J# n* ?1 r# ^3 n4 T& [什么是正则表达式(⊙_⊙)8 l1 M3 g9 c8 Z4 y' l/ J
    目前越来越多的网站、编辑器、编程语言都已支持一种叫“正则表达式”的字符串查找“公式”,有过编程经验的同学都应该了解正则表达式(Regular Expression 简写regex)是什么东西,它是一种字符串匹配的模式(pattern),更像是一种逻辑公式。) Q1 K" J8 u- q! L* s7 s4 p

    3 T+ l0 s* q2 E' V简单说,正则表达式是…+ K+ b8 }( V3 n7 n
    python中必备的工具,主要是用来查找和匹配字符串的。
    & n8 }9 A! F* j- c$ _* C9 ]# G8 M# ~" C3 }4 a9 v1 ~& J/ ^* g& U
    正则表达式尤其在python爬虫上用的多。
    0 E0 X+ V4 S* f! R
    , u9 \, B, [0 y- w3 Y, T+ [0 h正则表达式怎么用❓
      J% \( j4 ]1 e6 Q首先,我们要导入头文件(写c++写习惯了)模块  ?) j6 J5 T- w" N5 I

    5 `7 l( U! B! R, H3 Cimport re( [- A; _8 @$ J+ C) ^* a. x
    因为re是内置模块,所以不需要额外安装,就很银杏
    $ F1 R, G' k& f6 k: j; P; j" {- k" l: d( a; p. T
    sreach的用法🍊: N8 H; F) q2 L
    匹配连续的多个数值🍉
    0 @: g$ l  U- S
    " b* d0 T4 u3 D3 e0 B. i
    + r  ?$ B; @, D- J$ uimport re/ V* p6 W; }: Y  u* [; ?* Y; _1 ~9 V

    6 k/ U% Y$ N" G) W% J/ U, e* ^r=r"\d+"
    . D' v$ i7 @! `# Wm=re.search(r,"YRYR567eruwgf")#目标是5674 P; h) `  D& O9 u% o
    print(m)
    ! T/ d" m' C, u( D  n! R
    # g, b( c5 r8 ^+ m; Are模块中,r“\d+”正则表达式表示匹配连续的多个数值,search是re中的函数,从"YRYR567eruwgf"字符串中搜索连续的数值,得到"567"" Q  }6 D5 X9 r
    2 z- a- e5 k( O8 O* Q% u; U
    结果:
      P2 @: W; x/ }$ e9 v7 j+ @, c  ^6 o9 J! |* A% t1 j

    % W5 b( i3 M  E* g# z# n
    % b' A9 y  h6 e9 R6 Z可以看到,搜索到了连续值“567”
    4 C  X5 I2 _/ W6 N( J/ Z, d# ^. p! W, {4 X4 ]
    字符"+"重复前面一个匹配字符一次或者多次🍉8 u, H/ N& r: v) D. ?" h
    0 T! ~2 c- |& e! U- V( z/ d. B5 K7 f

    8 {! R3 F+ j: l- b& h, vimport re* u. G& s  c. C* J: \' G: {
    . [2 p% ?$ T* c- Z
    r=r"b\d+"0 F% \: A# J. ]! x
    m=re.search(r,"a12b1233cd")' N$ C! O! S8 X& ]( Y
    print(m)1 W5 C: y4 t! z: |9 K

    6 N( l/ v4 k- K5 c) U 这样,结果就是b后面的连续数字
    0 [& \$ b* p8 {: p9 _1 o: C. f& C/ z
    结果:
    : O9 A8 y3 l( w; C6 T
    , f5 }! T  U, {9 F! _5 N9 C* d) ~2 s# E( E/ X
    ) q' j% n: [9 J
    字符"*"重复前面一个匹配字符零次或者多次🍉
    3 j. H% D/ B2 |2 b6 A“*" 与 "+"类似,但有区别,列如:: @7 ?, x2 X7 T9 C+ x8 v
    可见 r"ab+“匹配的是"ab”,但是r"ab “匹配的是"a”,因为表示"b"可以重复零次,但是”+“却要求"b"重复一次以上  i2 V- U  g8 Z- K# ~0 P( Q

    ! o1 {3 q  y2 _9 {' o( H+ S
    : Z) Q4 y+ h+ K  Q9 x* _+ D0 E5 s. F5 ^6 _0 e  Y% \: y& t: {
    import re) }7 _3 n1 M+ Z2 g$ H- `$ z
    ( U; j! Z, h% a% r3 v# j) w
    r=r"ab+"
    # D$ d1 ^3 G$ V: ]9 y% |m=re.search(r,"acabc")
    " g- K! t  {6 Z2 a8 F# ~! s# aprint(m)
    # @8 C0 e( I, D' y6 H7 v
    4 w7 v/ E9 R" f1 i% Or=r"ab*"  e# ^. K( W2 f8 R1 E% Q. ^
    m=re.search(r,"acabc")
    5 T. x7 N0 c2 X) Hprint(m)
    6 @2 p* B" n! a0 ]* q. Q 结果:
    ( `2 V6 ?' i0 B4 K: p$ {, x8 o2 z* \
    0 Q9 `' a/ X% u7 `; R) E
    2 T, |( E2 H( h+ O' v/ Z
    字符"?"重复前面一个匹配字符零次或者一次🍉
    - r* H; Q; [; h7 d0 o- t6 f匹配结果"ab”,重复b一次
    / H' a4 Y4 i2 v: S/ P
    9 w# X* E- r* Z2 ~4 G
    3 e& `) K* Z) @9 g! F. P6 r; }0 N' M& {+ C9 W! D6 M& I
    import re
    ; n& l: ]' v* A2 N+ H
    ; e$ V+ V  E% b. [: Sr=r"ab?"
    0 ~7 Z7 x1 q$ q: nm=re.search(r,"abbcabc")
    ! j4 A- f+ Y  D0 i7 _3 z  Tprint(m)
    " }4 F0 U8 w, i 结果:  V4 ?& |$ L; W- j$ K6 M8 i, M; i
    . M: b+ Z6 O; C4 l% y
    + |# l( ]) v, T9 @

    8 E3 |  e  D0 g, _特殊字符使用反斜杠"“引导,例如”\r"、"\n"、"\t"、"\"分别表示回车、换行、制表符号与反斜线自己本身
    ! B; L2 C' C- H% j0 g& s0 @. ?1 Z
      K2 E$ q( `8 C( O* pimport re
    ) M& I# |. R1 {
    & i9 i5 U6 n0 a  M# ^r=r"a\nb"6 {9 ~9 U, E. l$ U
    m=re.search(r,"ca\nbcaba")
    ) }+ g7 B# a5 a- p0 D, Xprint(m)
    / f2 @% _4 R% r  J( o* t" n- y 结果:( O% A4 `# ^' Z& C0 n

    5 e+ Z7 z7 ^3 X7 l6 [, z/ z$ r5 N- w* v' y. d" Q* C2 G( \% U

    # i; X! k2 v% `+ X& p% f6 U: ?$ ~4 T 完整表🔍
    7 H& z2 ?; Y& `$ e- H/ O其实上面说这些都是比较基础,比较简单的,还有复杂一点的,都在这张表里* Z! _# P5 b( l0 k
    % S5 U; R6 |" f2 `9 T8 k

    : X; V* w6 V3 d* ^0 H/ ]1 F, P5 l6 G. F( Z- o, T
    match用法🤔
    ) P4 A1 p- m9 ~+ ~8 Xmatch用法😃" B! ^1 f2 u! Z. W/ c. J
    语法:re.match(pattern, string[, flags])  
    5 V2 ]5 f+ \3 }/ L# g  ^9 g  Q" K) b7 X) \8 {: [3 {0 L  F
    从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。
    * j1 o* J$ s( S* V
    4 i& p  s+ D. B$ t* U5 i& Z* h+ n#示例:
      Y9 g% z  i" a, s* d: b$ g: ename='张三'  V6 z' x  G7 C% A" J
    if re.match('张\w+',name):
    . D1 |7 j9 r6 F0 j  d6 N    print('{},你好!'.format(name))
    : B7 c% e% H$ g" J. k; U9 H3 o    # 张三,你好!# Q6 q; x5 E* O, N. ^0 ?* z- D
    输出结果:张三,你好* Q8 k% Z$ ^+ F4 a, h% l, H) c
    2 \& U/ `' W1 z4 i3 G$ ?
    9 ^, S, c& B- K
    1 S  m2 n) J" W1 M6 s" p
    张三:谁叫我?7 I, c8 G) _" U8 ]' C7 T" y7 |
    % q0 }- I3 [- V
    不开玩笑了,继续
    " {. r, S! a2 W+ f, k: E, G3 Z1 T
    7 i& O# t! X& s3 z4 F2 s5 i# c总的来说,match就是
    # p4 y/ |" S+ `7 u# G' F* H- K5 t# b5 G, Q/ e
    返回匹配的match对象
    ( A( p% I; C+ D9 n6 E1 h2 v默认从给定字符串的开头开始匹配、即使正则表达式没有用^声明匹配开头( z1 W/ D. A* @( I% a+ ?1 q
    match对象🍊& N8 c! w2 y6 ^. H9 l6 e  R$ f
    Match对象的几个属性: 8 y% R. v5 ?- M9 ^$ a  Z& K2 d

    ; @' @0 Y, R& G  `2 s注意,前面是有“.”的
    5 v5 [& |$ N/ A4 C" J1..string 待匹配的文本; c- [# o9 U7 ~: _6 W+ i' u% S
    2..re 匹配使用的pattern对象
    $ c0 O) K+ s$ h, H+ H- [3..pos 正则表达式搜索文本的开始位置) o) n8 e: c8 Z3 e1 a$ ]( }+ m
    4..endpos 正则表达式搜索文本的结束位置
    & O$ c8 c1 T5 X; D9 ]- eMatch对象的几个方法: ! ?  U6 u  e9 H, T# W) x6 D
    1.group(0) 返回匹配到的子串
    8 f. k1 Z& x0 b2 V2.start() 返回匹配子串的开始位置9 w* @6 z5 |! E2 m9 d. k
    3.end() 返回匹配子串的结束位置
      R( [4 b# S  B% s( n. x1 A( t4.span() 返回start()、end()
    % ~3 s: ^$ _: v, p- k: I; ~3 t1 _
    数量词🍊
    ! N3 ^1 q3 X$ }( p% k/ e6 P6 `6 r2 p8 \4 n7 }, \- S4 M1 ^7 }2 Q# p

    . h) Y' V# K! O8 ]3 l( G匹配开头、结尾🍊. Y2 M% [3 K$ m) \4 `

    6 H1 ]% q- m2 h  O 匹配分组🔍
    4 \% d" H/ U/ E
    . E3 A' n5 D! K7 y
    1 L9 W: j  I6 k好了,看了上面几张表,其实我觉得最重要的在下面  ( ~1 F& U% t5 O3 h. E

    + \) h- V: h' Rmatch总结😄" t3 s4 ^( A: G( H6 O
    其实没啥好总结的,但你要看懂这张图,这个很重要
    4 t2 q/ f3 E  E1 ~8 \; o. _3 b* i+ ~0 p0 ?2 \
    + k. z1 y. [5 u2 u2 j5 @9 H0 @

    0 L' t: @+ P/ c 我框出来的是我自己感觉经常用的* K  V3 T2 S& G9 n+ d! q) Q2 D
    $ }5 s5 D; v' V0 c. c- q
    其实我自己刚学的时候也听不懂,现在觉得可简单了
    3 b4 Z, }; S$ k
    6 d( G# u) K* f9 N0 m: y7 |$ d所以,你应该现在就觉得很简单吧?
    $ @# B( U( r* C# ?/ s6 D. j* D# }  \( z2 F- p
    但是,正则表达式的字符很多,容易记混,一不小心就好几十个报错,很让人崩溃+ r3 P, `) n  i5 V
    - \: A% w2 `. I! B+ v) I$ _

    2 Q6 r( r( y3 M1 w
    0 Y- k& V$ y5 [" p  g) s- M$ o实践出真知 凸(`0′)凸 ☀️, I& i, Y& t; `; a8 Z% g
    学了这么多,是不是想撸个程序了?8 Z& ?. V' K& [" B5 l; L

    2 l1 r5 D& N# _0 \: N已经给你准备好了
    $ g! Z) e& N$ ~- H- m* Y. X0 O( H/ ?1 |' E) h. U4 E2 o( e3 s& n- j
    程序效果:输入手机号,通过正则表达式判断手机号合不合法,& ~: w, [+ v; d( X0 u1 |* @+ t

    8 P* W- Y, h/ W如果合法,就输出这个手机号的信息(所属地等)
    ) t  X8 F1 L- f; _; d
    9 ~- x! y. [$ s' j如果不合法,就重新输入,简单吧?1 ]" Y1 S5 d+ q7 V+ K4 B
    . K6 `( }# k) {, B6 j+ x9 s
    这里我想重点说一下怎么获取手机号的信息
    / K9 k7 h. N2 [& [2 i; s7 n4 |4 J6 M8 u3 D7 E" E
    我一开始打算上网上百度一波的,没想到直接复制过来23个报错、我也是醉了: A& ]- ]* L7 f2 Q' s9 g
    5 P0 I; i' C5 k: @' M. o% x, G" Q
    1 x/ u1 t4 M/ s! E7 [4 x

    6 n/ `2 P/ y. x; |/ _: V( M哎呀,不能再发表情包了
    4 G+ Z/ W4 L+ H0 [
    $ L: P6 E  _9 J( `7 l  I$ G
    ; Z( P8 O5 j2 |  W. M; ^; L
    6 D0 J& m, a0 f- u0 o0 vε=(′ο`*)))唉,还是自己写吧、、、
    7 B/ ?* _, S  ~) \7 x$ u2 P$ F9 d, Q' U; w+ p. _
    我想起了有个模块叫phone,可以实现这个功能
    8 H% R& \  o' @3 G! {1 C! v6 h% Z0 `& P& P7 P- `1 X5 ?  @
    但是你可能还没有安装这个模块,要按命令行模式下输入pip install phone# [* a8 _& q/ F+ f! i" P7 _

    + Q: s2 \; u( U9 r3 J等个六六四十九秒就下载下来了
    2 B. ?" ^( l  o6 }4 y
    2 X6 N, n" m# H; C. g然后你就可以体验一下了
    2 x( g9 p7 I% E7 R, Q
    0 N/ G, Q, Z1 W5 a代码(PyCharm运行通过)
    # r/ c8 o# E( e) _' r
    0 n5 n9 m6 s# a+ q" q1 Eimport phone& X' U2 L7 f+ R& I
    from time import *$ }# p' i9 g% l1 s
    import re
    7 P9 Z1 H0 w7 M6 g* f- w  F6 c7 e( Z& u1 u- U+ |/ j# f. A
    def begin():
    $ y& \7 P7 w$ _, K- W) K0 t. I    print("欢迎来到查询小程序")' }$ l6 A: L1 ^; Q
        print("1.查询")& N1 e$ O" C! F% {5 M( o5 Z
        print("2.用户")# }) W) w1 v* p* D. }& a" V+ F* d
    - I  E) Z  G7 {

    ; Y' C9 _, A) M: p! C( Sdef p(n):' v% H# `& R9 P3 T3 ^3 _
        if re.match(r'1[3,4,5,7,8]\d{9}', n):
    0 W; w. I2 L' @3 |        if re.match(r'13[0,1,2]\d{8}', n) or \
    9 |2 w4 J, f4 {, l3 A. N( d                re.match(r"15[5,6]\d{8}", n) or \
    0 y. M9 G% `. c                re.match(r"18[5,6]", n) or \
    : c" a* G6 u% W* d: E                re.match(r"145\d{8}", n) or \
    7 Z) N  V" z+ I' U! r5 i                re.match(r"176\d{8}", n):
    ; z  ]2 [4 t1 F- v            return True
    # V7 B4 M# k6 ~$ y( o( ~        elif re.match(r"13[4,5,6,7,8,9]\d{8}", n) or \
    ; i$ h9 h5 M8 z0 q8 r7 i                re.match(r"147\d{8}|178\d{8}", n) or \
    / g' `8 M/ F8 O  s                re.match(r"15[0,1,2,7,8,9]\d{8}", n) or \
    4 @' c0 c. p' l; ~8 Q                re.match(r"18[2,3,4,7,8]\d{8}", n):7 M- c8 V- U, p4 O/ I
                return True
    $ R  l0 w* d( v' E$ ?/ ]4 q        else:3 h( N0 S& W! Q+ q0 \8 p5 j
                return True
    4 [* C. {- r' B    else:
    6 o2 G- _; Z) {. H! j% e: D        return False. e' p2 ]: Z7 c" Q+ z% w2 b
    " E2 Z9 l+ R1 x# l' d: E& S. @
    if __name__ == "__main__":6 W- }* y9 Q1 i, b' m2 y
        s=0
    0 {! b- t9 |  X! n: d8 d9 T& u    begin()
    ! W; _0 \- W9 T# e    while True:
    " B! Y' }5 b$ U8 ?! v        op = int(input("请输入:"))
    ( i% Z2 a$ S* T0 C2 p' w& k        if op==1:
    " ?  \. t1 I* h1 H            phoneNum = str(input("请输入你的电话号码"))& R! B; k* b8 S, C# g; N2 C
                if p(phoneNum)==False:' Z" B' e& g8 l8 F
                    print("该手机号无效")! U) F& E0 E' u
                    for i in range(100):( y+ [. B, g4 K" P2 ~
                        print('\n')
    5 K4 Z( g5 u4 {6 {* W                begin()
    ! U7 c6 r, W# |0 l2 Z* x& t            else:- l! g+ D4 P+ L: \% G
                    info = phone.Phone().find(phoneNum)* K! I0 `2 _4 ^$ k3 T
                    print("手机号码:"+str(info["phone"]))  X- [9 D, x7 W9 A- S
                    print("手机所属地:"+str(info["province"])+"省"+str(info["city"])+"市")
    " y. }8 I5 J4 _1 A                print("邮政编号:"+str(info["zip_code"]))
    3 T8 k& b" g+ h6 j  S* p3 ^                print("区域号码:"+str(info["area_code"]))8 W2 O- X, r3 J3 z
                    print("手机类型:"+str(info["phone_type"]))& }% d. Y5 B0 z9 ]8 t9 a7 T) B+ K
                    s+=1) o# G. J2 n: @2 \2 [# z
                    i = input("输入任意数退出...")
      \9 `3 W, R9 }( [9 W$ m# g8 V                for i in range(100):
    9 u: e* `. p2 c4 j                    print('\n')( n7 U  b' {* {0 K' `  G6 `! V/ X
                    begin(): v; u$ y! P3 D6 E- }5 y5 a% J& x3 x
            if op==2:; {! m# l  C: ^5 u7 {/ n. x
                print("使用次数:"+str(s))
    7 B; I4 ]) @: \  ^  D) x            i = input("输入任意数退出..."), M4 x3 Y9 y* M! X& e# \- u
                for i in range(100):! Z8 c' N+ u9 ^- ^) ?9 J
                    print('\n')
    ) C% c; x: m$ X0 i) P; M. g. Z& v            begin()
      \$ F" P' [3 N: ~: ~/ ^7 C) i/ q2 |
    写在最后🧐' e- X: ?! j2 B, [
    ————————————————
    ( o2 G' ~% S# o% C) L% c$ B版权声明:本文为CSDN博主「YR_T」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。$ P7 J. O: X7 b0 r5 `7 F9 y6 u& x
    原文链接:https://blog.csdn.net/m0_64036070/article/details/123853489
    ) p0 G2 |  ^# h) o: X% W  Y# A+ ^
    - ]5 O3 G7 m5 M0 W0 D* c2 ]
    3 I: V- `( K5 U+ I2 I. m0 G; \
    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-5-30 12:36 , Processed in 0.413592 second(s), 51 queries .

    回顶部