QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1922|回复: 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正则表达式(一看就懂)
    + |2 p  Q: T8 U5 C& s5 i0 F$ V8 [( Z& d7 o' _
    目录; F) s1 \: p7 H2 V  @

    2 ^7 W1 x8 p. j' n) o7 B" Y4 l7 r& \哈喽O(∩_∩)O😄
    ) P5 x/ h1 [( @+ P6 h! `
    * x" ~; _2 [: x  [什么是正则表达式(⊙_⊙)
    ) O+ H9 F8 V3 A$ l& G- F! h/ N* O7 a, A; P9 e# K. d4 X
    简单说,正则表达式是…
    ; A3 H# s7 y  O1 V7 v4 v- q  v8 s1 C0 x6 {
    正则表达式怎么用❓
    , Z# b7 l# M1 y" d' b8 f4 i4 Z0 @' w
    sreach的用法🍊
    ! t# ~) K9 a0 A$ I) t2 M) y& B7 A8 F3 d( D2 Q: E$ ^
    匹配连续的多个数值🍉* A1 K" n; g- J$ ^' S; V
    2 x2 V& t% n  `$ d( E) y
    字符"+"重复前面一个匹配字符一次或者多次🍉
    $ Z' E: |- `8 c% ~: w, Q
    ( [. r( _- r  {字符"*"重复前面一个匹配字符零次或者多次🍉4 d6 ~& M! t, ]" G

    7 n) v6 ]5 x6 [4 J* R- p' w字符"?"重复前面一个匹配字符零次或者一次🍉
    5 @* q/ n( e% B2 `# v, p5 K8 @' }4 U( f
    特殊字符使用反斜杠"“引导,例如”\r"、"\n"、"\t"、"\"分别表示回车、换行、制表符号与反斜线自己本身3 j! h7 Q4 \; O4 \* [3 M+ o
    ) r4 o8 [$ t5 d4 i. j& d
    ) }/ |, M% k2 {* n& \4 u4 G$ I2 s6 K

    ( V) ]/ J* z- t4 F; h 完整表🔍
    , A9 M" t; t& Z& t- \- `
    ) t; G0 H7 ]9 `9 B6 ? match用法🤔% i8 @) w3 ~( q) q. ?& `

    - u/ U. ^. @: w2 a2 g: p2 xmatch用法😃$ S. B/ Y( J' Y  a: S1 e
    , f: x$ p8 l' B0 C  [! Y( E' J
    match对象🍊3 K" j% U( L- Q5 P  n% k' a
    6 y$ W  }: o) J) ^0 h7 J
    数量词🍊
    & j) |5 p5 ]3 K0 q- e1 L8 k3 b' K
    8 u0 q5 m. \( q$ k7 a0 N匹配开头、结尾🍊
    3 m& d' v" I7 G; D6 a1 G% v" q+ f1 c6 z5 }$ }0 L7 R

    * m8 T4 S& N* n6 }
    1 s" p) ?/ S& G$ g4 O 匹配分组🔍9 B: L4 u! P- N- j; Y

    7 H/ A3 l$ j8 N% N4 k  G" J/ J' gmatch总结😄& E% l9 m- ^: M% U
    : O1 P, n# [2 R; a8 F4 w3 C
    实践出真知 凸(`0′)凸 ☀️
    ' i1 u1 G6 D; t) l% \% q) ]! d# A
    : I: A  L& `! u8 i3 b) u  b写在最后🧐
    ' n  \2 l) ]6 ?- s3 Z( f
    ' @: Z" d2 |: H9 u5 D哈喽O(∩_∩)O😄- n5 N( c. H( `# S( C  L7 ^6 ?. {
    今天来发一下python正则表达式,其实这个也是比较简单的
    6 G' `5 k+ C5 p2 z3 o/ M6 x( d5 a$ `
    2 j+ I4 I6 J' t9 L+ N肝了好几个小时才写出来呀
    ' R: m) l; @% t0 B. _( {1 D7 T1 T3 c1 K
    什么是正则表达式(⊙_⊙)
    & |5 _! \# B2 L2 c目前越来越多的网站、编辑器、编程语言都已支持一种叫“正则表达式”的字符串查找“公式”,有过编程经验的同学都应该了解正则表达式(Regular Expression 简写regex)是什么东西,它是一种字符串匹配的模式(pattern),更像是一种逻辑公式。
    * b9 f9 w: m  x* v  V  i# a$ q4 t" q6 S
    简单说,正则表达式是…
    ; y0 U; {2 ^1 d& z4 hpython中必备的工具,主要是用来查找和匹配字符串的。5 S$ n# f5 r) \

    . k1 K0 C! ?+ z7 Q0 }3 f- ?正则表达式尤其在python爬虫上用的多。
    8 S4 C0 @0 ~5 m# ^; i+ G2 ~% m% S+ Y8 }  X3 t
    正则表达式怎么用❓
    . f8 R# t; ]4 u: `首先,我们要导入头文件(写c++写习惯了)模块
    8 o4 ]/ q  Y( g  T% V+ y( R  ?" l' E; y% n5 M0 y! A4 f* Q/ b; f6 J, z
    import re9 {" p$ m& G* m
    因为re是内置模块,所以不需要额外安装,就很银杏
    - a% P8 V9 s) B$ v, {' ]# e- x2 x6 t$ F2 d
    sreach的用法🍊* m; f8 F8 t8 }" R2 E
    匹配连续的多个数值🍉
    ! j2 H6 @! h* O  u( r" x9 p: W: k; B4 K) a; t( B
    8 n( E9 Q, T* t, h! O
    import re
    2 q5 e4 ?2 g. P, E2 R" `
    ! ~8 P2 C" W2 z% j! U3 O6 V% k6 Pr=r"\d+"
    % w5 V. Y% I  }$ ], nm=re.search(r,"YRYR567eruwgf")#目标是567! }5 V% m9 l0 {! {# A' D
    print(m)! G& ^- S2 m% B

      D6 Z5 t. D  g  V- J3 P9 ]. ~re模块中,r“\d+”正则表达式表示匹配连续的多个数值,search是re中的函数,从"YRYR567eruwgf"字符串中搜索连续的数值,得到"567"
    4 j* c8 }, O8 }4 ^+ k* B8 w2 v
    & S6 @2 U% D* M+ W& N结果:
    ; M# y, w3 b; f, E4 m9 E( h$ R& d0 M9 m, B+ w1 k) `/ v4 h
    9 ]8 o  i1 x2 z* r* d! C+ }
    " t; d% a4 _/ e
    可以看到,搜索到了连续值“567”
    5 s# e+ Z9 E" P/ B3 f* @% O' b" q# Y( Y+ b5 \
    字符"+"重复前面一个匹配字符一次或者多次🍉
    8 A3 d/ d. l* f% n
    8 m; R( V: Z, n+ \, L# k0 m9 @  [- r# p5 `+ Z% q# O. q7 i- W
    import re
    7 N( x5 x2 x$ O
    1 z9 n" a& A( d$ K/ ^9 ir=r"b\d+"3 C7 u' S$ r7 d+ `3 Q+ T1 a( M+ H
    m=re.search(r,"a12b1233cd")' x3 k# W1 R- u) n4 i
    print(m)
    : e5 d0 Z$ I. `1 O, u
    : L+ f3 o! G8 |* B! X+ A! [ 这样,结果就是b后面的连续数字
    9 B, O! Y) g1 C% ^5 Z$ r3 j' c) @
    结果:$ }5 z+ T" T2 ]4 R* e( V
      B/ t% L; _0 ~+ N) C

    + y- y: A7 j* b/ F. e5 `0 _( n. S% A# e" @: r% e1 z
    字符"*"重复前面一个匹配字符零次或者多次🍉7 l1 f# N& p0 Q; l' T, v
    “*" 与 "+"类似,但有区别,列如:, ~+ i" N' X& {9 x' g
    可见 r"ab+“匹配的是"ab”,但是r"ab “匹配的是"a”,因为表示"b"可以重复零次,但是”+“却要求"b"重复一次以上' M8 a6 b' S( r; ^2 |% A- y8 p
    . M; ~" f7 S, i: h4 c

    $ S7 G' y) h* B0 x. t( [" `4 A2 e* J; c% j9 E5 D& k
    import re/ r8 m% {/ n6 I4 N3 E3 ^

    % d  r$ z) X2 k0 Z  y6 a+ wr=r"ab+"* u# b* G) \( l% {2 ?& u0 t( l) c8 s
    m=re.search(r,"acabc")
    , s# `) l3 m# T* Gprint(m)
    ' M6 s+ Q2 _: z$ R  D; L' K1 O
    7 j) a! W6 P! \7 O$ U1 U9 Cr=r"ab*"
    7 W* `3 r' n3 l+ n. Hm=re.search(r,"acabc")( i! @$ \2 m( a2 a
    print(m); h2 @) N7 S! e% O9 U) l
    结果:/ s8 f- d( g2 R8 X. Q
    , S/ h9 V' h2 Y0 `3 U9 O' |: c$ j6 |) v
    3 e" H. {; A5 Z6 M& Q4 q

    4 N0 }) e. B1 v; A字符"?"重复前面一个匹配字符零次或者一次🍉! A5 w' @$ \) ]$ v0 w. z
    匹配结果"ab”,重复b一次 / w2 D' a1 @# W- N) W1 f6 @

    2 r3 h! }8 c* @1 t0 N2 o
    - F0 o/ m1 ]8 ]9 _$ [2 \2 f- F& i1 D! I/ X* ~* C- C
    import re- M  m% N- E3 X. ^
      r4 L# d2 K& X9 [0 y
    r=r"ab?"& g5 ^  H. \( M! l; s2 |3 v+ Y
    m=re.search(r,"abbcabc"); J2 S% H: J3 _1 K
    print(m)
    . _+ c0 _: }  e 结果:6 a, H& J/ Y" l: \$ I* b

    4 N0 U8 o( L' J' i
    2 k; _( V" h. d7 `* x
    - X: h) w& g4 W. O特殊字符使用反斜杠"“引导,例如”\r"、"\n"、"\t"、"\"分别表示回车、换行、制表符号与反斜线自己本身, D9 L) D7 d3 U# T: p; e

    : W0 s8 F1 s/ t! ~/ @( {1 `) iimport re
    % H: x0 Y( N" r9 T% `
    3 u9 I  f2 ^: b- ?4 s0 X: K/ Wr=r"a\nb"
    ( O2 G$ }7 r' W+ w3 G& W0 w( mm=re.search(r,"ca\nbcaba")4 d2 g1 S. j1 H( `; V
    print(m)9 {% ?8 i; X* p( n
    结果:
    7 y* v9 p0 {9 B& E
    ; k4 c3 F. b& g) R9 q3 X7 V6 V  R
    + ^- @; s7 `- U$ p# P; i. A) K9 ?7 q: {2 k
    完整表🔍1 Q% r% x9 y8 D# T
    其实上面说这些都是比较基础,比较简单的,还有复杂一点的,都在这张表里$ M4 b# R. e- @% v/ D6 m
    6 j' m% H. w7 S
    + X8 D+ S! f$ a6 e
    8 \5 m* S# Q% U% l0 {7 _7 N
    match用法🤔- h: S/ I- A: K' i* `+ b: M
    match用法😃
    , q- T( o0 F% [语法:re.match(pattern, string[, flags])  $ }+ U' v+ y) m, ?2 M) r# o# y) e
    - |- @/ l; c- Q  P3 k4 W8 {
    从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。
    . p( U0 p& V1 z; ~  N8 n) v( Q
    : D4 X6 X4 _) G# O; b# q' w#示例:1 G1 J1 C0 Z" n
    name='张三'
    5 E; T7 ]9 \4 \$ o7 D6 fif re.match('张\w+',name):
    2 r+ q0 ^7 U7 G1 v' m+ Q$ @. |    print('{},你好!'.format(name))2 \7 v7 O/ ^4 G* r/ `' d8 R9 j
        # 张三,你好!3 t% z" D+ B2 J5 w
    输出结果:张三,你好
    0 L: s$ Q* L4 Q  ]' Y( w
    - X5 v0 T1 I; F9 f6 t
    8 G0 _+ U# N4 k  B- h4 _/ Q
    ; M  J" C+ I0 N5 g  e+ a# `张三:谁叫我?) {, v4 w7 l6 @$ ]
      M5 O8 }& \4 b" J5 l1 d
    不开玩笑了,继续
    3 O$ K0 _- ]& d# R# O9 O8 o# X5 X' ^) M9 X" ]
    总的来说,match就是
    4 J" J' V& x/ |, X- M
    + J# X3 R7 ~1 o: v1 J3 G返回匹配的match对象
    4 [) Y( o% Q: G3 s) ]默认从给定字符串的开头开始匹配、即使正则表达式没有用^声明匹配开头8 B: i/ {1 n+ k" I- h" O* P8 V
    match对象🍊
    1 [/ E' n$ L6 @) }Match对象的几个属性:
    7 S+ p- H/ g  E9 K: S$ V* I8 _2 |8 Q, z
    注意,前面是有“.”的
    : t4 V* m( x* e5 ~1..string 待匹配的文本
    : @% @# q% B6 s$ u% q! J2..re 匹配使用的pattern对象
    # {$ Q) A; f  H1 z7 T3..pos 正则表达式搜索文本的开始位置) B9 F# v# x+ T! J
    4..endpos 正则表达式搜索文本的结束位置
    1 X  x6 Z3 T7 K1 k. }, C) X2 yMatch对象的几个方法:
    / x: @6 e. B1 t) C) X5 A7 H1.group(0) 返回匹配到的子串+ S+ H% K4 r. F) e# }+ p. S
    2.start() 返回匹配子串的开始位置
    3 F- Y0 v3 U7 p4 e# ]3 u3.end() 返回匹配子串的结束位置
    4 X" ]3 T6 v" w9 v  P+ U4.span() 返回start()、end()
    2 ~9 W* I/ ]9 A4 F& ^8 ^6 a
    * k. Y& o* `) l4 D1 S3 J( e数量词🍊
    ) Z# X/ K" v& \5 B$ ?, [
    ) l/ v; c0 r3 I
    ( l! Q5 p$ s+ g- m# `$ h! Z, ], B) o匹配开头、结尾🍊! ^- Y* [+ ^' N# v1 d! y
    - b; y- Q* z! p$ D0 d3 Z- f
    匹配分组🔍
    ! h% _: G0 e3 C) R
    - V- u* Z/ a7 M0 c
    * W- U& ~4 @, S8 w7 O( v: k好了,看了上面几张表,其实我觉得最重要的在下面  
    ! v% K3 f. p. |  I$ Q7 C% x, F5 |/ d9 b, @" e
    match总结😄. U8 j& k' _) z2 d6 S2 Q1 c2 t+ G
    其实没啥好总结的,但你要看懂这张图,这个很重要
    4 \: U* D/ c, l- w  i3 K& k2 z( B3 ^* w
    + Y- _* q0 d. y( W9 {/ o# B4 s2 I7 e1 f6 g
    ) g1 x: K: ~1 r* `( F
    我框出来的是我自己感觉经常用的
    8 I8 C) t  u  y: \3 s, i9 q9 a
    其实我自己刚学的时候也听不懂,现在觉得可简单了
    3 F& X3 b4 L8 \$ H- f8 D/ V
    4 P1 a% f6 [; Y/ ^# N% X所以,你应该现在就觉得很简单吧?- {) O/ Y% s. l! e

    1 O$ A" F( e0 }* B' @( q但是,正则表达式的字符很多,容易记混,一不小心就好几十个报错,很让人崩溃
    % B5 e. I: M  h
    : K2 E$ y3 y5 L$ q7 H) B1 P0 D1 W
    3 q! g# F( u, j% ]9 d6 e; I5 P" b* y
    实践出真知 凸(`0′)凸 ☀️! P/ E9 g, x2 O8 F% f  r
    学了这么多,是不是想撸个程序了?
    * Y6 {8 n' g! C+ @
    . |/ l. ]+ }; y- P' |& g已经给你准备好了* r7 R$ Y* I6 x4 o9 v9 G

    ( @! E6 o8 d; `  A程序效果:输入手机号,通过正则表达式判断手机号合不合法,; h# M- O) t! {5 w/ N, {, l
    1 v. A" f! b4 t# C
    如果合法,就输出这个手机号的信息(所属地等)
    6 E7 C3 ^9 n" \' U4 u" l6 \6 N& Q% U1 b; D$ h
    如果不合法,就重新输入,简单吧?
    * l# {$ w: H- v4 O$ o* V
    , T4 z) k5 w8 M* i+ `) t这里我想重点说一下怎么获取手机号的信息/ U8 B) P8 A" H& V$ [# m
    8 z3 W* u+ L% f: h
    我一开始打算上网上百度一波的,没想到直接复制过来23个报错、我也是醉了
    2 k5 W* G! i1 Y8 C8 {+ _3 q* h0 h) x5 s# ?3 J' }' Y2 }6 ?2 }
    / z3 A2 p+ r3 |3 R

    , x- K: K# R/ j1 K# s) O9 U哎呀,不能再发表情包了
    ! x2 t( r1 B$ i8 v% m; I# @( Y/ V' T5 I' O/ A
    1 N5 i5 z' Q/ v' l/ \8 D

    ( k, D" o3 ?% [! J- A- X' Nε=(′ο`*)))唉,还是自己写吧、、、5 J) g7 i# g/ V% F6 x" M. l
    1 F2 k. a4 y! S) v6 ~7 Q
    我想起了有个模块叫phone,可以实现这个功能# A% A( C) B& q4 y

    9 e6 l5 c* v9 W) Q但是你可能还没有安装这个模块,要按命令行模式下输入pip install phone( F; g' S; T8 R7 v3 P2 k
    ! E( J7 {. |) ~
    等个六六四十九秒就下载下来了
    + s  I* m# z/ k% t. h1 S* i- d
    0 z/ E: H$ [% \& ?  t然后你就可以体验一下了* [) G3 |& N" h9 S6 |

    & B! d6 i$ V$ _" J( `/ X3 N4 p代码(PyCharm运行通过)
    3 `" d% `  A1 {+ N4 @
    2 O' W+ [4 I6 Q# j2 Yimport phone1 w* l& N  a* o! P3 ~5 U
    from time import *
    - q% z) m& K& t* s, I$ V) l6 Ximport re
    / H+ l) u1 x* J
    0 A1 D9 n6 ~" J1 zdef begin():
    8 {; |: h# v, s* X( b. L9 b  c    print("欢迎来到查询小程序"). V- G" B  E4 N: |6 F
        print("1.查询")
    ; a0 A, D8 i+ i/ S: F) C    print("2.用户")# E6 s* A; `- C6 E) b
    . ]$ Y+ S3 v5 U: I+ R1 Q

    0 a2 S& C8 u) H7 M) c0 Cdef p(n):$ H% {/ {% d' n; a0 a
        if re.match(r'1[3,4,5,7,8]\d{9}', n):
    # U* t$ d2 [# _: e/ E        if re.match(r'13[0,1,2]\d{8}', n) or \
    8 h/ ?7 U  a7 z2 k. b6 U                re.match(r"15[5,6]\d{8}", n) or \
    3 C7 d2 z/ P1 S* Y! t                re.match(r"18[5,6]", n) or \
    7 d2 i* E, Y' r" |2 a5 P                re.match(r"145\d{8}", n) or \
    - G$ c; F* X9 ]7 `6 g                re.match(r"176\d{8}", n):$ K; r) b2 `1 E: Y
                return True
    3 |8 i/ l. `- t6 p        elif re.match(r"13[4,5,6,7,8,9]\d{8}", n) or \
    / Y; Y% h0 ]! P$ Q4 c# a                re.match(r"147\d{8}|178\d{8}", n) or \* ]3 A4 d$ _, p& d& }5 k4 [+ d
                    re.match(r"15[0,1,2,7,8,9]\d{8}", n) or \: b3 J! A$ d; y2 N3 u% A
                    re.match(r"18[2,3,4,7,8]\d{8}", n):
    1 I- N( `. ^/ H# j! P$ O            return True
    5 c+ t- K- ^2 J" E4 g: O# ^; @. y        else:) O0 F  n) O. m, c
                return True
    1 U0 _- K' B8 x* F9 ?$ B+ n    else:; K$ S. U2 R! f. e1 A9 s( f; S* q
            return False5 [8 {4 q4 C, m* v  A
    ! e# C3 c- H! h' B$ t
    if __name__ == "__main__":
    ! o  L" H0 o& r8 t6 j    s=0
    4 l( L: J7 U0 F    begin()
    & I7 v- }% h* v5 [& @    while True:
    $ R7 q0 m" Z% T8 i1 g" c3 i        op = int(input("请输入:"))
      B, {/ V1 v0 @6 @: ?6 a, }        if op==1:5 l# G: v! B# s- i) p6 j
                phoneNum = str(input("请输入你的电话号码"))
    0 ?2 i" }; X5 o            if p(phoneNum)==False:
    , r# \0 J% Z7 D( B4 ?) W                print("该手机号无效")
    " X! ?8 q$ V+ M: d) R  t5 g) t4 X                for i in range(100):5 C7 u; w& {  ]! k
                        print('\n')
    2 p) R  ^/ u; ^' v9 w; c                begin()6 @' l& I+ I2 b( ?  B- c! G7 d4 l
                else:
    6 c% o7 e: C# y# E' A                info = phone.Phone().find(phoneNum)
    ! }' d  T1 |2 t9 V5 b, A                print("手机号码:"+str(info["phone"]))
    & J; |3 }% W4 x& C                print("手机所属地:"+str(info["province"])+"省"+str(info["city"])+"市")
    1 |0 G0 m" I* U# n                print("邮政编号:"+str(info["zip_code"]))* N! {0 m$ p* ?; }4 p! B. q
                    print("区域号码:"+str(info["area_code"]))) f# J! B2 `& b. g. [
                    print("手机类型:"+str(info["phone_type"]))% P7 }2 v% p7 Q+ o2 Z4 D3 j5 Y! h
                    s+=12 Q# x# J( w5 u+ N  ?
                    i = input("输入任意数退出...")
    - H2 z' {# r/ T6 c1 w7 {+ J                for i in range(100):; {+ S+ s( R' n& k8 I/ k
                        print('\n')( n. S7 T( X/ L$ g
                    begin()/ I5 P! _7 j5 z2 l# m0 }
            if op==2:, d- i# T# S0 d9 L9 S
                print("使用次数:"+str(s))" k7 r) A! L+ h2 h# b: h
                i = input("输入任意数退出...")
    ! F8 q6 Y8 Z. c3 ~& i- y7 k1 K            for i in range(100):+ V- o8 X4 J, F: b" i: w( j
                    print('\n')
    & A/ O5 \# N1 I- m; s' x1 g* S            begin()
    . u! q) q7 C. b2 L( B
    1 q, V" R9 _; |  q" i写在最后🧐, J. C! o% g: _/ g1 q* _9 ^4 i& x
    ————————————————+ o; s. l6 H6 ^- t- h
    版权声明:本文为CSDN博主「YR_T」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    - |: @, Z! p8 T0 u; @' ^, N7 J原文链接:https://blog.csdn.net/m0_64036070/article/details/123853489
    : e$ z. P4 @% B
    $ o- Y/ H8 J* ?- `; N- P4 Z/ U& N
    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-14 22:18 , Processed in 0.880489 second(s), 51 queries .

    回顶部