QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1946|回复: 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正则表达式(一看就懂)6 y) z* d2 u) |( x/ Y) H  W

      P% @. E$ p2 `! T* |  f; s; ~目录
    ( c! W  K: Q5 W
    ; c  t+ a- |  b  t' g# L哈喽O(∩_∩)O😄* b1 ]" j- L, \- W6 H
    9 [  U" z! z' N
    什么是正则表达式(⊙_⊙)
    , P: R% L$ v; W: m0 T( {3 Q
    9 s, \7 n$ u+ H- S( G$ j* v4 E7 O简单说,正则表达式是…6 u% c  p  n, E" |; k9 y9 T
      ?. J9 c1 R: L+ e
    正则表达式怎么用❓  z9 O) K* j* l8 \. r

    6 R4 n# z; V! ksreach的用法🍊5 W7 ?5 x1 j7 {, c) N  O+ Q

    % q0 G# s* r- c匹配连续的多个数值🍉! r0 N+ y  ^8 p# O
    8 T# q* b3 Q7 S' A
    字符"+"重复前面一个匹配字符一次或者多次🍉3 {; c+ E% u0 t  Q# I; R
    * W0 y7 a. y! e) D( c; Y
    字符"*"重复前面一个匹配字符零次或者多次🍉
    3 `* x& h+ x+ A$ E5 i8 o- J% U4 g+ z! C2 |9 P9 [; [* Q0 R! [
    字符"?"重复前面一个匹配字符零次或者一次🍉
    ( {7 y7 n' |0 T% j% X  n  _
    2 A9 \8 n0 {" ^* P' p) r特殊字符使用反斜杠"“引导,例如”\r"、"\n"、"\t"、"\"分别表示回车、换行、制表符号与反斜线自己本身
    % V+ n; e  m6 z( b' r% U* C6 ?3 Q( d% S8 }# B& M$ g
    ' X* L# _2 m9 w0 e5 J

    " k# X9 K$ M: z# @6 J  U 完整表🔍; b1 S3 c$ f. _) \, F+ r

    0 p7 e/ D- K# {1 B7 y, T match用法🤔
    $ i$ Q) A# r5 Y* U+ j+ |1 m. G- z# M# I6 h' h- c& J: @7 w
    match用法😃
    # g) \* R  u' [" ~2 f% A
    : D- k5 E1 W8 @1 {  |3 ]8 Y& ?( M% T match对象🍊
    8 S6 a+ o" _7 ~
    / c0 P( i6 h- i数量词🍊8 _) i; d8 n, h; K6 j) }
    " Y+ n  c1 y+ y2 x8 c- i
    匹配开头、结尾🍊
    + _# T) W8 i  Y8 D7 u+ x# ?; ]; Y( ~2 d( p# ]' L
    . |  o3 [; g$ ^( R( ]" {1 j0 U

    , y9 i5 q. Z. o1 {; A, X  W- t 匹配分组🔍2 h; l$ ~( L/ K. a+ B0 G8 j' w
    ; R+ H; F- Z8 C9 K' G4 n" G) G" |
    match总结😄
    8 q* I9 U2 ~6 b/ p' x0 [% b0 U" L' m$ u: T
    实践出真知 凸(`0′)凸 ☀️
    ! m/ P% `) G9 _7 i! l) Y- R9 g4 e) y5 \+ g8 E3 ?8 a( p$ q5 j+ ?
    写在最后🧐
    9 _5 @/ ~% F$ i* E3 l
    1 V* J: w! E4 s哈喽O(∩_∩)O😄4 a9 t+ ^/ R: e" e5 a& d
    今天来发一下python正则表达式,其实这个也是比较简单的
    . X  ?: v8 Z0 t; j* F9 ~4 w! Z* T) U2 o3 v
    肝了好几个小时才写出来呀' |+ X2 Q; q& I' F; q0 R

    1 {* F# w3 H3 `( {3 Y3 B) ~. I什么是正则表达式(⊙_⊙). a; ]" y1 Y# ?9 F) f1 W
    目前越来越多的网站、编辑器、编程语言都已支持一种叫“正则表达式”的字符串查找“公式”,有过编程经验的同学都应该了解正则表达式(Regular Expression 简写regex)是什么东西,它是一种字符串匹配的模式(pattern),更像是一种逻辑公式。
    7 D( l5 f# a8 M. V7 C# y: m, ~" ^, O" Y7 W5 r; ]6 Q
    简单说,正则表达式是…
    : M- B' `! ^( C0 q, @; l) t/ ypython中必备的工具,主要是用来查找和匹配字符串的。5 b" h0 ?2 B4 e! q5 C6 Y
    3 P0 e0 f  Z9 p
    正则表达式尤其在python爬虫上用的多。
    ! Z! {* }" _/ A3 M* u. R# O- z  R4 ^7 K2 j2 L  q
    正则表达式怎么用❓
    9 Y$ Q- T8 V% D' u首先,我们要导入头文件(写c++写习惯了)模块/ p1 [4 ~  p( m) @: n/ Z% Q

    , I6 S8 i. X/ p+ a  X& m9 Eimport re
    $ h9 T4 i# _( C/ n7 ^% T2 X; n因为re是内置模块,所以不需要额外安装,就很银杏( q2 ]# K+ ~) T5 i" K% r
    $ |5 c- L1 ^+ o! Y& t/ I
    sreach的用法🍊
    + k$ X7 _. C9 }. B* D: G8 P) j  M7 m匹配连续的多个数值🍉
    $ M6 R9 T" I, e# P6 k+ f+ g# X- {

    ) l! \8 p3 p6 C$ T8 e0 vimport re; z6 A! U+ y- m  I5 Y

    # e% I5 X) l) o! |r=r"\d+"
    + x2 T/ c" v5 h" H+ qm=re.search(r,"YRYR567eruwgf")#目标是567) s" T0 B5 \6 F6 T* f/ j/ x( ~
    print(m)
    % y' G9 S& `* E" f, u
    " z  F' b+ @- Rre模块中,r“\d+”正则表达式表示匹配连续的多个数值,search是re中的函数,从"YRYR567eruwgf"字符串中搜索连续的数值,得到"567"$ d2 E, N: |8 b5 ^$ c3 H0 s, L
    3 Y( T/ ?3 Y1 M) t' p
    结果:* D1 s& R' C: \& I: T- i( d

    " }- e( S! b7 N, Z/ `
    ' W2 M7 l3 A3 r4 W6 ^" u/ S% @7 ^9 g
    / i! `, R+ C( H3 a, {可以看到,搜索到了连续值“567”
    0 U3 b; R/ r0 |2 w2 C& |8 z; s: T' {: K
    0 F7 p; x: K# g$ {' y8 N# K, B1 F 字符"+"重复前面一个匹配字符一次或者多次🍉9 l, K& A3 X# \
    0 q6 u8 i& w$ M5 A) c

    : S- m( ]6 f4 q; Iimport re) V; c) S0 _+ T( A9 o
    ' u) K/ Q( k( q% ?
    r=r"b\d+"
    4 P" S8 R+ @; O, N& {5 fm=re.search(r,"a12b1233cd")# Q/ p8 r- |) C5 b
    print(m)+ T7 z1 Y/ K6 P: C

    + I' g- Q; t  k. o, o  i7 t" w 这样,结果就是b后面的连续数字" v+ }- ?1 _5 A6 E/ N! m* k9 k8 R
    ) r$ F  V: b) Y& E5 u: D
    结果:, z$ j8 O/ f! D4 T0 J$ X/ ?

    3 a9 M" b4 @( A5 f2 \8 e4 K, X$ r
    3 m9 ~3 \4 Y! [4 v) n# f/ K: c4 R, v0 x& ~6 H
    字符"*"重复前面一个匹配字符零次或者多次🍉
    % E0 [7 V( n7 k“*" 与 "+"类似,但有区别,列如:  h0 A8 N! t- m- U& W" \
    可见 r"ab+“匹配的是"ab”,但是r"ab “匹配的是"a”,因为表示"b"可以重复零次,但是”+“却要求"b"重复一次以上
    6 E3 }" o8 X1 i7 M4 R, C0 ]4 K+ K& A) M7 W" @; ~" G0 W) M

    + v9 T$ R0 X& U7 R; F2 n! Y
    " t8 R' T7 I( X- J+ I" q' Timport re
    4 G# q4 z7 w6 d$ F1 ~2 F* k8 F' ~/ ^4 P) F# C
    r=r"ab+"
    ) K- Y! `  v  [; a8 s9 S: Om=re.search(r,"acabc")& @" v# O# f" M
    print(m)0 x8 L" Y8 ^, l* E* [! ?
    ) G, i) S, X4 B9 e4 {
    r=r"ab*"
    8 p$ U; ^7 H7 }: Y; v& c5 Em=re.search(r,"acabc")
    . ^4 d1 |! Y9 r1 }* o2 R7 q# cprint(m)
    " V/ q2 Y3 @- k% e- ^* I 结果:- i( h2 d" z% p9 A+ G: \
    : w$ d& r! A& S5 T. V! H1 w+ e

    8 B3 ^* W9 p. I$ m6 C; x( N* G  ?' z: n& }3 S0 X! m' b6 R5 u$ {
    字符"?"重复前面一个匹配字符零次或者一次🍉" E/ Y+ D6 c5 p5 Z, h
    匹配结果"ab”,重复b一次 " p6 Y# z6 P4 ?6 P) I3 X

    & e. z( u( V9 m9 U/ f/ s
    8 U, z2 S, F; u/ ?0 F1 z5 B0 ?; B( [9 l/ n) V+ T
    import re
    3 g# o$ U4 q+ I' K& `+ W# x4 U& z; ~' J8 H5 V3 B
    r=r"ab?"
    $ s5 ?: y: b! L; |& k3 fm=re.search(r,"abbcabc")* h, f4 c1 d4 H4 n4 `
    print(m)! j* P. Y. T  Q# u% M
    结果:, E- ?7 o9 X6 X) k# x' @8 K9 k# d
    ; o& N* \7 w: M' ]# M& V: _
    ) r) h9 U: ^( o4 Q4 h
    # A' W4 t# s# D8 Y- p
    特殊字符使用反斜杠"“引导,例如”\r"、"\n"、"\t"、"\"分别表示回车、换行、制表符号与反斜线自己本身
    , u1 f% K4 v( }! q2 a6 z- L- F1 \
    2 `) s7 v! [  x& wimport re
    ( z1 X0 {# G( o( K2 R7 j' h. P' L4 \
    r=r"a\nb"
    5 y2 C9 _; c) i" I, S7 |" Wm=re.search(r,"ca\nbcaba")
    7 J- }; }  D, sprint(m)
    ; i, f9 m$ D1 T- H, j# `* y 结果:7 I# Q% _  I2 t* Q* a' s
    . V2 e. T1 H6 }' c
    $ k. Z, t& J& a9 |
    0 |$ B) Y: W) j3 l  b
    完整表🔍
    , d; p, P" u8 L: L其实上面说这些都是比较基础,比较简单的,还有复杂一点的,都在这张表里
    % O1 b! ~; c4 m3 P( K+ M. S  d; p  |( \. k: N# f: d
    + I. {! U# A  y

    ; |0 p+ W& Z3 U9 H- \ match用法🤔& e7 V. o" h* l% A1 `$ H5 g  Q% N
    match用法😃. |+ l) f( p+ h* ]" O
    语法:re.match(pattern, string[, flags])  ' X: _( X0 r- ]! f) S
      N# W6 Z9 t, g/ d/ m
    从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。+ p9 ^$ Q# @. a' h- p
    / E3 ~6 d3 w. j8 Q  ?8 t) d
    #示例:
    0 i6 D% i: t+ j9 qname='张三'
    . P$ A% w# T+ Eif re.match('张\w+',name):
    - N7 Y# |5 S& |( f    print('{},你好!'.format(name))* X3 E" B" {4 C/ [% T4 U
        # 张三,你好!' ^+ w, s$ K4 L& s- U
    输出结果:张三,你好
    2 f& F1 e+ v- c# Z$ ]( ?
    ) c5 c6 Z# J' a/ }$ ]. \- ?$ a3 C# j3 j' V. Q4 d/ Z2 O, A
    # i9 i# x! f5 g7 N. G7 T
    张三:谁叫我?
    . F$ b. R, S  ~# n1 ?8 l  F1 d9 y. P# x$ ]: s
    不开玩笑了,继续
    $ _' f9 W2 k# z2 o: h: ^
    - |5 e: [) G, I5 c/ |# c& Q总的来说,match就是, b# |2 @* F4 U

    . B: W1 B" C8 ]/ L* H8 I返回匹配的match对象
    3 r; W0 r" w& l: n; S# i默认从给定字符串的开头开始匹配、即使正则表达式没有用^声明匹配开头
    ) O8 r" u0 d% h" p match对象🍊
    4 [0 I1 G7 f7 ?% F5 Y! CMatch对象的几个属性: & V" k0 G0 ^. A# }; T( j
    3 v2 F+ Q( {3 X/ `$ @1 Y' ^, `/ A
    注意,前面是有“.”的+ t. g. H6 A7 _) U4 c9 H
    1..string 待匹配的文本" V/ z/ r& ]( D% l( Q% f
    2..re 匹配使用的pattern对象& C2 G3 a) s1 y; @! J
    3..pos 正则表达式搜索文本的开始位置
    1 u# x/ {$ v) o' k% r4..endpos 正则表达式搜索文本的结束位置3 d4 V- y( R4 K+ Y) y# N
    Match对象的几个方法:
    7 Q8 |3 E) N  Y* ?5 m3 T$ j9 R1.group(0) 返回匹配到的子串4 {: P1 D  X" `% a% e
    2.start() 返回匹配子串的开始位置& _! N; W' i' v( ?1 {& C5 B3 z
    3.end() 返回匹配子串的结束位置
    + ]/ d/ c2 f3 e! c$ \4.span() 返回start()、end()
    1 A; ~1 M; T% P: t; `6 K% }0 I7 p6 v- B+ }* \
    数量词🍊
    4 B0 W5 x% h. R5 y) q) f* F8 o8 x) ?+ ]

      ^; I4 y8 p+ d) `! q匹配开头、结尾🍊* R# I7 b6 \0 s0 W9 b  C9 _
    8 e7 O4 b) {7 ~1 i
    匹配分组🔍8 [' `: r5 r) i; f7 O, m& e
    + \4 P7 O* z5 X+ i$ ?% Q' q

    ( A+ e: l, f6 e% J$ U; R+ J好了,看了上面几张表,其实我觉得最重要的在下面  
    + V* q: n9 i0 ]# d5 }  S
    3 _( W- }) t2 \; o+ O' A* [match总结😄
    4 A% p$ I7 c' m& v* J; z其实没啥好总结的,但你要看懂这张图,这个很重要
    9 C3 [5 B! _* o) Z: Z: b, W$ m" \& N  U5 [
    ! ?6 r4 u% T8 ]' Q4 X6 z' p7 m
    3 X) {* q( }" \0 g6 d/ |
    我框出来的是我自己感觉经常用的! U( n. D' G, Y/ x7 b' v" d

    ' G7 k7 I& x8 r. ^( b0 L% j6 |8 E  ~其实我自己刚学的时候也听不懂,现在觉得可简单了
    8 R  r+ g8 _2 t: D' J
    + I) ~, n; |% D2 f) T所以,你应该现在就觉得很简单吧?
    * {% F3 L  H  J4 c# _# ~6 |8 h2 {. [
    但是,正则表达式的字符很多,容易记混,一不小心就好几十个报错,很让人崩溃
    , x/ H  }( Q' K# ^" x  O0 H3 }1 h4 }4 {- ^" [

    % @: ~+ R& t6 ?) _- v; D2 z0 \
    # F! u  N7 v5 o: f4 E/ v实践出真知 凸(`0′)凸 ☀️- k4 G' h, W: O4 e4 t: v
    学了这么多,是不是想撸个程序了?2 l$ s( `  d- m4 v
    ( I" |; e7 @6 }( }
    已经给你准备好了
    " V$ o3 `& p4 b9 I8 v
    : I9 e& }* E$ }3 ?% E程序效果:输入手机号,通过正则表达式判断手机号合不合法,
      t; m( ^2 b. N% z' T* Q! h7 n/ L9 x
    如果合法,就输出这个手机号的信息(所属地等)
    1 l; V4 O. Q$ _5 w5 f0 Y- l' m5 j! G. x
    如果不合法,就重新输入,简单吧?
    ( y$ h  H, ?- u8 a5 U/ j9 ^6 x3 \5 V6 X
    这里我想重点说一下怎么获取手机号的信息
    : L, b5 p8 ?/ F) c6 g( W
    & q6 W" K; `4 e2 F; }, z/ |& l* g) M我一开始打算上网上百度一波的,没想到直接复制过来23个报错、我也是醉了) J5 ^7 G- l- A) q$ Q- }7 w

    ( H$ _- C* K4 R% L; U
    : `2 X7 @5 E2 \+ l0 S7 c
    8 z( x3 s) P" N$ D5 K2 s  Z哎呀,不能再发表情包了- O/ c, |8 Q8 B3 M# }$ @
    8 [7 \6 O! _% w7 m# b2 \4 T0 |3 j

    5 d  l, o  C) Y; U$ D; G. j2 C5 o1 s" {! [
    ε=(′ο`*)))唉,还是自己写吧、、、
    + c" M7 w% ^. |5 _9 [
    - `1 z* `- `5 F5 w4 L3 V- S  h; X我想起了有个模块叫phone,可以实现这个功能) k* n5 C, x$ F" v' y1 r
    & f) X! T( t% f
    但是你可能还没有安装这个模块,要按命令行模式下输入pip install phone' [! V4 L! T% _
    / n# u( V. W! G7 c9 r8 F& N$ T
    等个六六四十九秒就下载下来了! T$ j" _, r* [

    3 p) c4 t! G3 y$ g/ [然后你就可以体验一下了
    ! k% a) I6 Q/ Q& ?& P& \, c. _* K6 `, B& P
    代码(PyCharm运行通过)4 x2 ]2 F* g6 c  A2 t- M1 [$ Z
    - f( M& H1 H0 K
    import phone/ v1 M. R: O4 I# x$ @9 p
    from time import *, R3 e5 M& S2 T
    import re9 \5 E1 f: F: l. A' {& Z' c) e
    ! n( h( }# X1 X8 N. c
    def begin():
    ! H1 r  m& f, a5 m; F) e6 Q    print("欢迎来到查询小程序")
    " }) B7 Q  K; C% h+ ~" D9 G* u( X    print("1.查询")6 @. L5 I% {  N6 @
        print("2.用户")
      P  K, K) h# a3 x% e9 M1 H: m+ p) ]; @- H

      Q9 g# e0 ]: W# S2 U% {def p(n):0 d/ S5 k9 ?0 K2 v) U
        if re.match(r'1[3,4,5,7,8]\d{9}', n):4 t0 D6 [. F6 z- @0 `6 O
            if re.match(r'13[0,1,2]\d{8}', n) or \
    ) H; e' Z$ X/ g* l) C9 Z: u                re.match(r"15[5,6]\d{8}", n) or \1 G( {6 {( @* _) x6 a$ ]  g
                    re.match(r"18[5,6]", n) or \. ~9 U: p: b% j; G+ W9 z5 _
                    re.match(r"145\d{8}", n) or \
    & C- T/ C* F; p/ c* }, W# I                re.match(r"176\d{8}", n):
    + f* K$ [! `1 e' r* w: L0 Q            return True
    , N8 A2 f- M+ X" p        elif re.match(r"13[4,5,6,7,8,9]\d{8}", n) or \# s% r( b2 L8 P, |3 X8 A0 b: Z6 d
                    re.match(r"147\d{8}|178\d{8}", n) or \* g+ q, F, j8 S: _/ A- Y" g
                    re.match(r"15[0,1,2,7,8,9]\d{8}", n) or \% _# n) ?, l6 z$ z
                    re.match(r"18[2,3,4,7,8]\d{8}", n):
    / c9 ^" H* g# g1 g) l            return True
    4 {8 C; Z+ s" U; k4 ?        else:
    / N: ~1 k! R2 x1 m            return True3 x* F; O) G" x$ |: d3 W5 c  W$ L
        else:/ C5 y. B+ j4 Q% C3 q/ E
            return False7 K8 x( k  o1 F( n. u
    4 c- |9 k9 \6 H% _) \( U$ v
    if __name__ == "__main__":* g' |! x) e, l6 a$ ~4 q
        s=0
    $ D' p4 @6 G1 w" u    begin()
    , {- o3 r( b% T) r7 P    while True:9 K  W: C* e2 f
            op = int(input("请输入:"))
    : L0 J5 |; ~) q6 H& ?% u3 I        if op==1:
    8 O  u0 g# V, b9 D9 S            phoneNum = str(input("请输入你的电话号码"))
    8 p2 \! j! C/ p* n* x: ]1 o            if p(phoneNum)==False:
    0 m7 i# l9 f+ ?" b$ _3 i& w) L                print("该手机号无效")7 o7 q6 R; T4 f: x  C
                    for i in range(100):) j! r# i: J9 \3 w  `, k
                        print('\n')& h- z! ^% A) X+ [
                    begin()
    ' ^# J  a! T7 B* R, ^6 {            else:
    5 s( x$ ~& {. ?& `- r8 F                info = phone.Phone().find(phoneNum)9 q/ M) H7 {: q% O3 g) h( Y% }
                    print("手机号码:"+str(info["phone"]))
    # A) G: @$ j; Y2 y                print("手机所属地:"+str(info["province"])+"省"+str(info["city"])+"市")
    " g: j$ b0 j- E: I                print("邮政编号:"+str(info["zip_code"])), R' ^' C2 t9 S; B* E0 h3 J
                    print("区域号码:"+str(info["area_code"]))
    1 a7 _  B  Q  S; c                print("手机类型:"+str(info["phone_type"]))! [" [6 m7 T8 ?; R9 x2 A% X
                    s+=1
    ; X$ p$ p# N. l9 L                i = input("输入任意数退出...")
    5 D# l+ r; \$ A5 ^5 U* c                for i in range(100):
    * R  g* x" O# e# J: R6 w; f. @  ?                    print('\n')
    ) y! }/ ]4 d4 T. h6 N9 \                begin()& r4 t) ]# T! y! |
            if op==2:
      o9 c# n( c% A            print("使用次数:"+str(s))' s4 d. y1 `6 _# j
                i = input("输入任意数退出...")4 ?3 g3 j* _) K# P
                for i in range(100):
    : `  B6 j1 X/ Y2 M* z! b  s3 K                print('\n'), m4 N, e+ |! ^4 j6 n: V
                begin()
    / Y2 Y( E8 d9 A) E: Z! s. ?4 p6 @7 r! b; i7 ]
    写在最后🧐
    1 T6 G! M8 h/ Q' z2 L: D2 R————————————————; E( z: ]1 w+ \) D3 ?, g  k, A
    版权声明:本文为CSDN博主「YR_T」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    5 ~( @- D4 e, ?4 i0 X# R( ?原文链接:https://blog.csdn.net/m0_64036070/article/details/123853489
    / N6 X9 P# {& y% h) f# i  Q6 v" P0 w2 Z4 P5 E- {* Y$ M) @1 j
    6 d: V# Y$ d/ f; m
    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-6-15 03:45 , Processed in 0.426100 second(s), 51 queries .

    回顶部