QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1979|回复: 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正则表达式(一看就懂)* [/ o! {0 w& m" ]& K
    + A% ]3 @. _8 ?
    目录
      Q$ f1 X2 d* w% a
    / b' M9 \2 c/ O, m哈喽O(∩_∩)O😄
    $ W2 D! y! i/ h6 _1 S4 n/ [( B# \. w# S% c2 T; N7 o  E
    什么是正则表达式(⊙_⊙)
    ' Z- K/ Q1 W' n8 A5 r2 r9 X7 z: G# ]# N1 j* H2 W+ e+ T
    简单说,正则表达式是…5 ^1 V4 R6 g1 y
    0 U/ F: r+ y/ q4 v9 |. ^, k% V1 y/ l* e
    正则表达式怎么用❓/ h/ @9 b7 v3 S( t# [1 Q) q" B% i( d

    # K# k" C7 u; G7 T: O/ ?sreach的用法🍊& s" c/ m5 M: Y2 W/ M( `

    / h* X! r/ s8 h: x匹配连续的多个数值🍉+ |; y' q3 K  S0 h
    7 P+ Y6 ~) o% p3 p& _8 j7 N. c
    字符"+"重复前面一个匹配字符一次或者多次🍉
    ; d+ t) l, A8 l; P7 Q" g  q; {! ~9 ~( f+ R" L7 [1 Y5 j+ a6 ^
    字符"*"重复前面一个匹配字符零次或者多次🍉& G8 J( P. B( ?0 I0 p

    ! s7 G  b9 l" N4 Q0 `1 Z- p字符"?"重复前面一个匹配字符零次或者一次🍉
    # e  @/ |- X! Z; d
    3 D% U# d6 \! z  e% e. H特殊字符使用反斜杠"“引导,例如”\r"、"\n"、"\t"、"\"分别表示回车、换行、制表符号与反斜线自己本身* \$ {* Y8 V$ W. Q* U7 f) c, x
    & U6 K4 t8 ]4 C  U
    3 u) y& H5 G- C" }

    # U: C+ b2 J- O8 o" [( \4 t 完整表🔍$ W8 u" C* n4 W9 c8 k/ |

    1 @. T; |0 |1 T+ \5 ~ match用法🤔7 z- R+ R2 L1 A( L

    , I* O% b6 m% C4 Ymatch用法😃, g$ V( u- Z2 U

    ( P* p! Z' i/ S  |0 O% [- g match对象🍊7 I" a* R9 w# L' q
    0 o, Q6 D5 w9 M4 X8 Q4 M4 j% X' P
    数量词🍊
    ) H* \% g3 o6 a5 I# ^( j7 P  i* K$ N& Z- }6 E6 L% |
    匹配开头、结尾🍊# Y+ n. k( ~3 l/ s

    . j2 z1 L& H0 `# k9 T' @
    8 E5 `$ J! U, m& k0 M  S& T
    7 P9 K" a) j$ i0 C" a 匹配分组🔍8 ^3 l; Z4 }; d2 }9 J4 m

      o) S& n4 B4 O5 L% l9 g) l( x. }match总结😄- T' S: N" `: ^7 c2 S3 q

    1 R8 }; j2 W8 i实践出真知 凸(`0′)凸 ☀️
    - a/ P  z/ f, o  `) W
    # `9 P$ E5 V, w写在最后🧐
    $ I0 O! q. N! t5 k
    $ n4 g& y. t; L# `哈喽O(∩_∩)O😄
    ! h$ O. a* F/ n, g6 D5 T) v9 Y今天来发一下python正则表达式,其实这个也是比较简单的
    4 b6 E" |" b8 B8 ~+ c- {7 a2 s7 ?4 Y: C5 i( L' S) Z
    肝了好几个小时才写出来呀
    & ?$ ]; `& C9 U7 |% ~/ j! G5 F+ T) Z/ H" Z+ t. k+ f
    什么是正则表达式(⊙_⊙)+ p( [3 r3 i/ ^. s
    目前越来越多的网站、编辑器、编程语言都已支持一种叫“正则表达式”的字符串查找“公式”,有过编程经验的同学都应该了解正则表达式(Regular Expression 简写regex)是什么东西,它是一种字符串匹配的模式(pattern),更像是一种逻辑公式。
      f) G* i( Z6 h% z. z" p3 E7 U
    4 `. D( f5 U5 H. w% o简单说,正则表达式是…
    # P8 w( u; {: n$ spython中必备的工具,主要是用来查找和匹配字符串的。5 F) t( G- K8 s
    + {0 q! c7 _- g7 r, {
    正则表达式尤其在python爬虫上用的多。
    4 e/ a2 Q0 q( o8 v
    5 c  \$ L1 i8 U4 q6 E正则表达式怎么用❓4 V; s5 I( i6 E( O. I. J
    首先,我们要导入头文件(写c++写习惯了)模块
    ( F& F2 a! k( i! \! S. |* K4 }5 y& V+ B5 r" ?/ E9 n& n$ Z
    import re
    $ G$ F8 ^4 }2 F, o9 }! w因为re是内置模块,所以不需要额外安装,就很银杏
    * H; L6 g2 g$ c. E# ~# p
    & z5 b) O" e+ L, rsreach的用法🍊% o0 n, a) J4 F6 i; U4 A- g4 h
    匹配连续的多个数值🍉
    1 t# u4 N8 g5 I$ [% ?; R% B. ^% _' O. {9 k; F

    $ |# T- z3 V7 E: Iimport re! L' c4 a" s" }! _5 Z7 z

    . H0 S6 v1 L0 ^! F" Or=r"\d+"
    - z1 q' X& i  Z1 W" o! um=re.search(r,"YRYR567eruwgf")#目标是567
    ; S" @; \9 y/ H! @2 ]! }print(m)0 N/ V; c+ L/ u) |% k: y  _7 h

    8 ]2 M3 i, ^- R1 Zre模块中,r“\d+”正则表达式表示匹配连续的多个数值,search是re中的函数,从"YRYR567eruwgf"字符串中搜索连续的数值,得到"567"6 q1 r& K' `" q; H) x2 N6 O
    $ [9 |" b  C/ G- j
    结果:
    ! E1 E) Z! w% t1 \: ?& Q
    : l: ^. ^& I1 g% |  W! U' s: h
    & u* s$ ?1 t! H# k  q
    可以看到,搜索到了连续值“567”7 {4 W; A* s  W- S- G4 u
    ) |0 l7 K1 N9 n! E) p; M, z" m
    字符"+"重复前面一个匹配字符一次或者多次🍉
    : n  r8 X* o4 b8 z
    4 C% Z3 T. K+ i% q$ ~* }
    0 t* L/ u  \6 e% r" ~5 C! D$ Jimport re1 f- f0 `3 E; `* j' U

    ; I4 G7 h" O# N% Ar=r"b\d+"
    % n! N6 ^, H9 A5 ]: a  km=re.search(r,"a12b1233cd")
    $ |" m, x) z; Z3 V) Eprint(m), m  v% v* A+ ~) O0 m8 j" K
    / t; l7 @* s4 h/ C
    这样,结果就是b后面的连续数字2 u0 [: _  I, d. ^: [" F

    ; o, L! e. ^& l; @+ M结果:
      H0 w; s6 l, m0 A# F9 W9 C: ]- ?  X2 F
    / w1 x% q) O% I- i# w

    ( Q+ A. F1 {9 B字符"*"重复前面一个匹配字符零次或者多次🍉0 h) N, T! y3 }2 m' ]6 i& J8 Q6 U  K
    “*" 与 "+"类似,但有区别,列如:4 j7 H2 Y/ J7 \4 j
    可见 r"ab+“匹配的是"ab”,但是r"ab “匹配的是"a”,因为表示"b"可以重复零次,但是”+“却要求"b"重复一次以上) Z, h0 K; k! [( Q
    . b4 E+ ^, g9 u6 ^

    : C$ T8 U9 b$ s/ S1 j6 J$ m5 n) N# z' n( B0 E) P! K/ ^- U
    import re& A& \' ^$ m4 y- X* ^& t- Z% O! |# ?1 ~' S, u
    ; Y& h+ r9 n% g, K' b7 A0 U8 e7 s: I
    r=r"ab+"% S, A* F( i2 l- q4 ]
    m=re.search(r,"acabc")
    1 V. ~1 l1 \5 @0 t% Y+ `print(m)
    2 v7 n. q; }8 O9 k" L$ Y# z: m: a( \
    r=r"ab*"
    3 A6 j4 ^! v% b2 o; w1 d5 P" `. qm=re.search(r,"acabc")
    - v3 ~, z2 L- p% g! M: w1 Tprint(m)
    / P6 M# _/ ?# k6 Q5 _3 \7 t 结果:
    + A/ h# r$ W6 i9 z8 l3 g+ J* J: B$ e) M: W# j

    " \2 p- D6 ~$ C3 N9 I0 `5 U3 Q4 y9 Q: K, [3 Y: q1 Y
    字符"?"重复前面一个匹配字符零次或者一次🍉0 w6 {* D# x, Z( W5 p
    匹配结果"ab”,重复b一次 ( H, v1 x+ O, W  L" \5 U

    % {6 h; G0 `" G3 Y: K0 l
    7 H2 i7 Q8 t; \; w! \' o' l; H. ?# u- n9 B2 \4 X+ [/ a  z" c  e5 L) n
    import re+ w& I5 t' ~! y7 @: p

    4 C( g- a/ K! \r=r"ab?"
    1 Z2 [! M0 M" X: x  D# Hm=re.search(r,"abbcabc")3 Z$ N( r9 v" J# v
    print(m)# t2 M& |0 G% s5 N8 A( _
    结果:7 Y( U. p( x: _- _
    # _# |7 i" R# G

    % ^! m* G4 Y8 G. \' y5 F$ Y2 ~2 h1 Z. s
    特殊字符使用反斜杠"“引导,例如”\r"、"\n"、"\t"、"\"分别表示回车、换行、制表符号与反斜线自己本身" R1 X/ c. H3 T: G
    # E3 D0 O0 W( R! \/ \9 \9 p* U+ `( C
    import re5 z8 [" H8 B  \+ m3 {% D* F! n

    " a8 T2 L" k- q& X# z* c  I% A& P/ er=r"a\nb"# O& t& Z0 t8 d
    m=re.search(r,"ca\nbcaba")
    + k8 ~; ~/ t. |6 J  zprint(m)& ?& K) K5 C5 {0 k* T! V4 Z2 d
    结果:3 R0 I5 e' v  L
    5 h8 B/ O  _# v6 r. R  W" A

    : R4 c, \$ x/ L4 G" m. D0 r5 Z  }; p
    完整表🔍( j4 \2 u3 H7 f- _8 k8 {7 ^
    其实上面说这些都是比较基础,比较简单的,还有复杂一点的,都在这张表里3 S6 v0 t8 S4 J1 m/ D
    1 _" Q9 F- M: _$ o# W# K* _
    " N+ ^+ v# L& P6 `4 Y

    7 G" e$ s8 \" y$ \8 ?: O) `! h match用法🤔/ k' M5 E% i5 O( ~7 [
    match用法😃* ^& A, M( I2 H- |" C. R
    语法:re.match(pattern, string[, flags])  1 A, j; G0 X  d% R2 n

    6 K( t+ y) b, \0 x2 K从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。
    8 b6 U; O0 C0 I0 h* R# f0 ?
    3 R; U% U" I  j# t2 d' ~5 }#示例:
    5 y$ N: N( q1 d: d9 Hname='张三'
    % G$ r, ~9 R8 g5 u6 D* K. y9 E' eif re.match('张\w+',name):7 P& B5 K2 H9 }% [, M$ Z- N; Y0 Z
        print('{},你好!'.format(name))
    ' P) j( q7 A0 E. r2 U    # 张三,你好!
    " O: K7 C# Z. `2 v' z5 O输出结果:张三,你好
    ' o5 C2 J( R* f5 T3 f" O0 b! w4 T: U
    $ R& a" T2 X& m% x+ O4 h, a4 m& K* L/ A) `6 r1 e) h/ q; I2 M

    ( ^3 l4 Z$ A5 j2 t+ g张三:谁叫我?% |" ~2 O; C3 Z* d2 x. z% B5 W- M7 L; P

    ' x5 E+ y, e$ W+ k" d不开玩笑了,继续, |8 A" S( [* A1 ~7 {

    + q. B3 n, O! b/ u  B: T+ ~9 I6 s总的来说,match就是* M( I+ ^# B* {/ `4 x( U! E

    " n% H; T9 r. I. f, c1 u返回匹配的match对象
    ' Y/ h) U; O6 l9 Q6 q" [默认从给定字符串的开头开始匹配、即使正则表达式没有用^声明匹配开头) @8 k" C( }) }4 G
    match对象🍊3 m5 G0 c4 `/ M' N  c& K
    Match对象的几个属性: ( u* Y8 C$ ]3 H) V9 s! z. }

    " \8 h) b- a7 B2 ?1 ^' a. }注意,前面是有“.”的
    0 u) z% n: \6 i" A1..string 待匹配的文本+ S: K* B& r$ n8 u
    2..re 匹配使用的pattern对象- M5 u; `$ \0 O8 }3 V) E" D
    3..pos 正则表达式搜索文本的开始位置
    ! z( b9 V7 ^2 \; W3 L  W9 t6 S4..endpos 正则表达式搜索文本的结束位置2 j. C$ a' P2 T
    Match对象的几个方法: 0 v7 P- z: w% m/ m$ T6 [" _
    1.group(0) 返回匹配到的子串& H' l. o# p& U8 u* v; p8 g8 a
    2.start() 返回匹配子串的开始位置% F4 @1 j. D7 S9 _2 Q+ {0 A
    3.end() 返回匹配子串的结束位置
    7 A- K5 S- U1 t3 V( d0 S4.span() 返回start()、end()
      h/ z& Q; T& A( J! c
    0 a2 f$ Y* ?" a3 [, r1 g数量词🍊
    2 X9 I  ~1 w! t7 }: h$ Q# f/ X  b- ?- _8 L+ M" N) u2 N2 M

    & h; k2 l. V0 j+ J# I匹配开头、结尾🍊
    " ?+ \, F  w7 l, @3 ]$ D' P* n
    % F. M3 i, w8 l3 `' h* V 匹配分组🔍4 u/ Y5 O7 n) h' {* l
    0 C: x. d, Y+ p: ~* ~
    8 N: T( U" N" k; s8 a8 X* I/ R0 b. ?
    好了,看了上面几张表,其实我觉得最重要的在下面  
    4 e1 [# K( u* X8 H: t1 n0 l6 Y4 ?3 c7 L
    match总结😄$ f; @, b: b  K$ O; G% k, U" H
    其实没啥好总结的,但你要看懂这张图,这个很重要
    2 d; F% ^+ y( t( R/ s+ R
    0 H9 C9 h. U" W% Y+ j. V
    4 T9 x4 G- K* L# ]7 y7 z/ C$ B" ]9 h
    我框出来的是我自己感觉经常用的
    & G/ b* S0 W6 T2 Z! v! A/ d/ {+ A+ R% U2 T" P: g# m
    其实我自己刚学的时候也听不懂,现在觉得可简单了4 {* ^) h! z+ I% `6 c
    ( e: m9 T* ^! `, g
    所以,你应该现在就觉得很简单吧?1 O# }' v0 c& [7 c6 t( g

    ; \. M! V# y. Z2 J* e; S) I但是,正则表达式的字符很多,容易记混,一不小心就好几十个报错,很让人崩溃" k% u9 Q) s6 L

    ' n; E; j1 J/ A8 D6 I& q% C) W% P8 Z& i7 q. K6 w' Q

    : C" f# h8 e5 Q2 G" b实践出真知 凸(`0′)凸 ☀️
    + q4 G9 E9 o2 g7 }9 U& x; A学了这么多,是不是想撸个程序了?8 h- I( `$ M6 h7 w6 D2 T

    . H( M& \" i, y. U0 z已经给你准备好了$ y* R, a# f* e# {

    1 `% B, d4 ~/ k* j  F! q程序效果:输入手机号,通过正则表达式判断手机号合不合法,- {8 W1 t" S; a" L. c2 h

    % d$ N2 [, {% v9 {0 j; Z0 y如果合法,就输出这个手机号的信息(所属地等)
    7 k8 ]" g' y/ I7 w% i; f% I, a; m; c: b& n, E
    如果不合法,就重新输入,简单吧?. t8 y$ l  ]" k* s% }% g

    5 o9 y2 l4 ^+ ~- A  X) j这里我想重点说一下怎么获取手机号的信息+ d+ P- y( t9 B" ^! l6 z' i. k

      V  ?- \' \2 C3 o我一开始打算上网上百度一波的,没想到直接复制过来23个报错、我也是醉了9 e& e; _/ O- X( \# D

    6 j% ]3 d6 Q: ?5 q! E" H1 D/ ]; \5 W3 K: D9 a

    8 X6 Y  v5 Q4 ^# q- j  Q' k1 |哎呀,不能再发表情包了0 H8 Y; I+ o6 U

    3 |) I0 T& z! G
    4 M3 [  I0 [6 _
    # ]  S# ^7 }& B  X/ f4 w3 eε=(′ο`*)))唉,还是自己写吧、、、
    4 q& {/ T0 O) p; ]
    7 Z# P& V- u# Q/ |8 m+ Y7 J0 J我想起了有个模块叫phone,可以实现这个功能8 z9 I) M3 p# b. z% R

    $ r2 d2 n. f+ M6 v但是你可能还没有安装这个模块,要按命令行模式下输入pip install phone
    3 T9 G! O! {; Q( z9 H- w7 h* J7 o6 M  j7 u+ K3 H) @: b
    等个六六四十九秒就下载下来了9 W7 \8 u+ F" V6 n) V

      ]! A3 k2 g) h3 v然后你就可以体验一下了  }0 z. t; ~: Y' s
    " y$ D0 X& X7 E( T- W
    代码(PyCharm运行通过)
    " s# @( f  Z# u  u6 W  I  T5 i: v+ c6 }3 [3 D8 X" l
    import phone
    8 L7 U0 F4 a9 dfrom time import *' Z& p7 d- ^7 G) B  a
    import re
    ' `, J# L4 g/ k; U2 t* J' d! G. J& Y# f! y- }( d+ y# k: k
    def begin():
    + t! m; X$ g5 I    print("欢迎来到查询小程序"), U( f" K8 a* y) j/ A
        print("1.查询")
    . a5 B6 T& ?( N& _: V, L    print("2.用户")
    ' ^+ \9 Z! u* F  @: S8 g& \& h" d, g, S# l0 H; y$ T; a
    ! ]# T4 U4 D5 C/ M! }
    def p(n):
    $ b% m; a2 C" P4 s, g6 V6 y2 A    if re.match(r'1[3,4,5,7,8]\d{9}', n):6 z3 l5 N9 P1 q8 p4 d! [
            if re.match(r'13[0,1,2]\d{8}', n) or \
    - V0 L( w! D4 T1 G. Y+ a, m                re.match(r"15[5,6]\d{8}", n) or \1 w: M8 e8 @5 Q5 n0 B% \' c
                    re.match(r"18[5,6]", n) or \
      M+ }3 N0 i, S0 v7 S& s                re.match(r"145\d{8}", n) or \
    . ^0 Z- e) [' ]0 J) @                re.match(r"176\d{8}", n):
    ( Z2 m8 E4 G5 r            return True
    : H; h. v2 E. S+ M! r, K9 }) v7 l        elif re.match(r"13[4,5,6,7,8,9]\d{8}", n) or \
    5 q, X3 M6 l+ p2 a                re.match(r"147\d{8}|178\d{8}", n) or \
    7 H' I  J( f- M7 }# J1 D' ~                re.match(r"15[0,1,2,7,8,9]\d{8}", n) or \
    & @: S- U9 H, h8 `                re.match(r"18[2,3,4,7,8]\d{8}", n):/ q/ B  Z+ `. K2 [  h; q% ^- h
                return True& W; ^' l0 Y+ P5 ^) V. l9 X- `
            else:6 j3 j: B" Q/ A5 S
                return True
    $ `. j& H+ \- g( p* F    else:
    & s: i9 x" G4 q, s* a/ N3 Y        return False0 M- x; l, Y: P! B- O: s6 J* h
    + n4 z" W& @4 X+ @
    if __name__ == "__main__":2 \' j) l* M' ]
        s=0
    ; S! t( Q, z3 H- o$ X( H' b    begin()
    : H# j1 r( e- A  C2 d    while True:
    / _$ r  J- x# I" X' O& q, A        op = int(input("请输入:"))0 F1 V- \7 I3 b( z
            if op==1:" J" i" V# N& Q/ `
                phoneNum = str(input("请输入你的电话号码"))
    $ Z5 j! z" Y  l9 B% c            if p(phoneNum)==False:' F+ u9 ~$ T0 x8 l2 _3 H
                    print("该手机号无效")
    8 H, E& p- H! i- `- \4 j                for i in range(100):" X" n3 e) p) ^5 }
                        print('\n')+ G; L5 ]5 Y/ l8 v) a
                    begin()
    & j% T2 ]6 C, O8 z- I( I            else:/ j- Z9 C3 ^! d6 N0 Z2 R5 m
                    info = phone.Phone().find(phoneNum)
    ( G" O! O' w; p' t9 G* ]                print("手机号码:"+str(info["phone"]))
    " Z' E5 s! u4 o! x& V# B' W                print("手机所属地:"+str(info["province"])+"省"+str(info["city"])+"市")
      v' _$ ]0 S- {2 A* C$ m8 b6 J6 \                print("邮政编号:"+str(info["zip_code"]))
    3 _. m+ I) L7 m* a( l9 |: [                print("区域号码:"+str(info["area_code"]))
    0 d) ]' x3 U% W6 L                print("手机类型:"+str(info["phone_type"]))
      z: w0 t! j0 p! g                s+=1' a" m( }8 v( x# A1 R1 a) y' L
                    i = input("输入任意数退出...")/ S) C- p8 n; k  i5 D( g
                    for i in range(100):6 g  @: j# i5 h6 }9 v& d# w
                        print('\n')
    4 ?1 e- x! T8 n7 r% J                begin(), T7 ~) e) e+ ]: r3 i. h
            if op==2:: o7 R, n. G5 a9 u% q1 n9 F5 Z$ E
                print("使用次数:"+str(s))
    2 ?" X1 F! @# N7 Y: ?" g% X; o            i = input("输入任意数退出...")+ C4 h7 g1 j' [1 C" o2 z+ z0 s- Z5 x
                for i in range(100):
    , A2 _8 Y. f) }+ K                print('\n')
    0 F) H. \; z, n6 i; X! C            begin()
    4 Q% D9 G& ~) B. b* x+ v- y) \
    5 Y. F8 h' H2 k3 h" f写在最后🧐6 @# B: Q9 I8 f7 Z) a$ }
    ————————————————8 z) E2 Z$ A; C% C5 S+ @
    版权声明:本文为CSDN博主「YR_T」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。& m2 e$ f9 Q: n& }* u- b0 K
    原文链接:https://blog.csdn.net/m0_64036070/article/details/123853489
    * H) T; E) P& z9 f7 a, t- ]& k$ r: f! e) D. ?

    6 [1 S. b  c. }& r: b6 k% h5 u* h
    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-9-13 20:15 , Processed in 1.005102 second(s), 51 queries .

    回顶部