QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1938|回复: 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 V' N  W! K% ?3 q7 M. G

    & I+ @7 R5 N( K7 G# S目录
    & o4 X; K' Y( ?7 O- ?. b: r3 I% B3 l' J1 {! ?+ I+ N0 Z
    哈喽O(∩_∩)O😄" N( B$ S4 i/ ^- T
    ' z1 J: T9 t9 M4 C
    什么是正则表达式(⊙_⊙)
    ; m* k0 N7 e& r; X2 }
    / |6 b( [4 B% k7 _9 W! o2 a简单说,正则表达式是…
    . n+ D! R' f+ k: e4 ?( O1 D9 b3 |- [+ ~+ j% g0 Z' X- D
    正则表达式怎么用❓
    ' B$ c# f( |& G0 {# F2 [
    ! v, G( @. R2 Psreach的用法🍊2 g; d7 Y* R# u6 M* w. u& B( l
    ' @) m: }% \: R! _/ m/ q& h3 c
    匹配连续的多个数值🍉& D" \. m' ]' g: w' j1 M" D
    & ~+ R+ r. e5 H- z' R8 }3 k" V2 p
    字符"+"重复前面一个匹配字符一次或者多次🍉
    2 l$ I+ H9 y  e$ N' M
    2 ^+ ?' c- ~: Z( m字符"*"重复前面一个匹配字符零次或者多次🍉  J, m) ?6 S  {. X  D" V8 r
    7 e3 O0 o! I1 c, X9 I
    字符"?"重复前面一个匹配字符零次或者一次🍉+ h, ~/ B  a! K" p. c: G9 }! @; C
      m6 H3 S" X* }2 r3 l! {
    特殊字符使用反斜杠"“引导,例如”\r"、"\n"、"\t"、"\"分别表示回车、换行、制表符号与反斜线自己本身
    ; o, o: B# e0 u1 U; l! K8 l" t  f: k: s& J
    . ?- R; p; \4 T8 a) N

    * Z) n$ Y8 U7 V" S- p6 q 完整表🔍; g* p+ ?1 Z4 X" R$ o
    1 D6 |2 \; C5 U- t$ [) \/ _% j3 d
    match用法🤔
    3 K8 _; S: d+ N5 N/ e& l& Y/ r# ]: k$ Y+ Y- c) j! K
    match用法😃
    & r4 U" ~. x, k: R
    & r3 C& ^# _/ u4 B4 T match对象🍊3 x8 U$ g6 I6 R8 R

    7 b2 l* M% @) L3 w数量词🍊
    8 q; V  w" N- ^8 s+ J+ t1 Z/ y* `9 M' A2 _0 u: ?
    匹配开头、结尾🍊
    ; {& i: K' T% F/ K6 X
    # p) F) a1 S1 D; {& C) ?
    / t4 a2 o/ G' l
    ( Z  l5 p* R* {9 J 匹配分组🔍
    9 B4 B; C: X6 [1 }( H& e& A* }$ a- p5 a  z2 ?" B3 i- t
    match总结😄
    : @3 F$ K7 ]8 C+ y% ?7 r) ?4 w4 o/ H  l. {. a( o) L  ]
    实践出真知 凸(`0′)凸 ☀️. ~& ~4 T1 S* ]2 ~2 p6 W3 m2 ?
    4 R+ W+ ~5 s9 w; N: d6 G9 _. ^
    写在最后🧐9 ]( Y- a2 _5 S" h8 J! H
    , R/ z, t* H3 c$ z" \9 G
    哈喽O(∩_∩)O😄; c- ~6 N; }( \% r- ~+ G
    今天来发一下python正则表达式,其实这个也是比较简单的) X7 Q- H4 K/ ~3 x7 A3 Y
    ' R8 z* S6 x" \
    肝了好几个小时才写出来呀
    $ P* ?6 S: a; S( S( H. G) p
    1 z2 `0 b2 Y) j2 s& n! V8 m6 m什么是正则表达式(⊙_⊙)/ j  m5 T* r$ _$ N' n& Q) d. _
    目前越来越多的网站、编辑器、编程语言都已支持一种叫“正则表达式”的字符串查找“公式”,有过编程经验的同学都应该了解正则表达式(Regular Expression 简写regex)是什么东西,它是一种字符串匹配的模式(pattern),更像是一种逻辑公式。
    & D" }2 [; D6 ?7 m' b2 X- i* Y' y6 w" h- x: M$ C; b
    简单说,正则表达式是…
    & Y1 o3 m& P4 U. K+ xpython中必备的工具,主要是用来查找和匹配字符串的。
    ) }* Y1 n; @. }7 {0 \5 p# t; P+ W6 G
    正则表达式尤其在python爬虫上用的多。+ a# j4 ^% C' j
    & h0 X  v# J- \2 h% A% F3 y% w
    正则表达式怎么用❓
    , H  v" N) h' ?& [首先,我们要导入头文件(写c++写习惯了)模块
    9 ^' A# d" d/ R( V, J% b0 P/ X
    ' `0 x: ^% O$ Z; |( F9 \import re- T3 e6 B$ O6 [+ `" i- _, F
    因为re是内置模块,所以不需要额外安装,就很银杏# K( X, R  }% ~1 m0 B
    ) z# R) j- t! T  q3 u0 P
    sreach的用法🍊8 e. A# Q& T: o1 J5 J% k$ H3 {. ~
    匹配连续的多个数值🍉+ p. a, Y, _( X5 I' o

    : Y" z" p8 p; Y. d9 K# @  |" v3 W& G( s3 o  ]1 R% l  r% g
    import re
    ' R7 D5 @# ?. j6 V7 I
    2 a) o3 Z$ ~0 Jr=r"\d+": G- [' h/ o/ U1 d$ \1 o5 Z1 b# T
    m=re.search(r,"YRYR567eruwgf")#目标是567
    ' ^( b4 t( e" }  aprint(m)+ x* L' G& _+ b. A6 E

    $ D( j4 k5 }" w9 S* [0 C: L4 Qre模块中,r“\d+”正则表达式表示匹配连续的多个数值,search是re中的函数,从"YRYR567eruwgf"字符串中搜索连续的数值,得到"567"
    5 x7 D3 j, L! L3 [! c: h
    # g5 y+ R- P$ c/ g* N  w结果:! k- t% a; t$ U* Y: u2 ~( d0 [

    . V2 ^8 `( C/ ]+ x0 j' R/ K' B
    # z5 v% Z5 K$ \8 P4 g1 Y" C# T, @5 J( m3 J3 c* q
    可以看到,搜索到了连续值“567”& z' q1 H; |# l3 D' {# @
    $ H! S/ X. ?* }4 L7 {: O
    字符"+"重复前面一个匹配字符一次或者多次🍉
    ; ]+ ~) K+ u' L. g3 N# L. l" N1 }2 A, [( E! T/ W$ |
    $ T& E" I9 w3 M) }- Q3 M
    import re
    4 \3 _8 F8 y; K$ n' U3 A. i$ p5 m- [1 ^
    2 ]* V. s/ d0 Y. Sr=r"b\d+"
    5 [! H" M; Q# J6 i( e) y5 f  Q( _m=re.search(r,"a12b1233cd")
    6 l: l" F$ D; Q$ K& I* Hprint(m)8 [1 |5 V+ R9 s( G- }( d

    ) s; H% O) v1 `( n9 i0 x) g 这样,结果就是b后面的连续数字% z9 P+ P5 b6 ^" {+ g; r/ ^: b! f
    ; p$ j' [# v1 ^$ O( Z% t$ w  ~
    结果:
    : V2 ]! X4 C0 H9 w( W* d6 `7 X! J" B! B- @7 p) _+ x

    . b+ V& T/ J  B7 i/ |
    * @' q2 Z" x2 {8 V/ b7 k字符"*"重复前面一个匹配字符零次或者多次🍉
    + q; s: A% X+ e- c& ?8 B# M; o! q“*" 与 "+"类似,但有区别,列如:
    # U7 k$ T( p$ |0 p可见 r"ab+“匹配的是"ab”,但是r"ab “匹配的是"a”,因为表示"b"可以重复零次,但是”+“却要求"b"重复一次以上5 A" m* h) K' X

    4 @, l- r# A) n  k
    ( l2 s. l8 Q. T3 c) _! ]- B' T, f( ]7 ~9 U
    import re
    ' ?- N0 M1 [& b% `4 \: p" j2 w4 ^, u; a
    r=r"ab+"+ g# u8 [( d6 ~+ }" d6 d" c
    m=re.search(r,"acabc")$ u6 ^9 c" Y( n& C2 X$ U
    print(m)
    4 M8 M5 l6 |: l2 O1 i- }. c0 ~% l) e) b+ y* l0 y2 i; `# ?5 I
    r=r"ab*"
    $ D& r0 d; \! x) D; `) o  w+ Am=re.search(r,"acabc"), G, t8 s; n% w' }1 O
    print(m)
    8 V, n  p1 t5 Y( q7 ` 结果:
    ! I4 r& z2 I: {: s; ~
    " {- j+ i, {* P! _4 h2 I# g, `* R2 h* t6 t! c1 l5 C: I$ E" n& e

    5 G# D% v7 ^4 W1 y1 f  f) o* a字符"?"重复前面一个匹配字符零次或者一次🍉
    4 F4 N% N% Z: |) T% ]) N7 z匹配结果"ab”,重复b一次 8 b5 d; y$ `: @  u$ V
    # }+ n8 D8 L  o8 c- H. i# o
    ! {8 z4 C' n1 s1 T3 z5 m# w% M8 e
    " e( Y6 n, ?4 D3 k, h& R
    import re
    0 |* P. w4 ]9 e/ _/ l% g' q
    9 {0 P: }9 O/ ?9 [" Y: Gr=r"ab?"
    . [- E7 \9 Z6 `% vm=re.search(r,"abbcabc")  k( {+ C( o& [6 r: ]
    print(m)/ y+ X' Y0 {8 R' b) }9 Z3 T
    结果:
    2 h$ I# b- K% E4 v( Y% Z+ O& r2 a- a# O7 i" }/ A

    * p+ s* {1 l* _" H' C5 p- i/ o# D1 x% h( j
    特殊字符使用反斜杠"“引导,例如”\r"、"\n"、"\t"、"\"分别表示回车、换行、制表符号与反斜线自己本身
    $ f3 {" E/ S0 U0 S0 E& n5 \: K% b# t  b2 Y  O$ Z2 U7 T0 f
    import re
    8 p1 }' s( T# P9 [  \( H
    0 L0 i3 i3 D0 i6 c: \r=r"a\nb"; a7 P$ K+ W+ v/ f- K: L( I$ K
    m=re.search(r,"ca\nbcaba")) o2 O# f8 ~% E5 w- ?/ m
    print(m)2 B! U9 ?/ f# W% u9 @; ^; x
    结果:
    3 r) R6 ~6 v: I& E' F* Y. P5 ]0 E5 {4 o; b3 ]
    : r# n4 J' Z1 n* n- ]6 A
    & b) I. j9 F& W3 C9 L  W
    完整表🔍; V  k) x3 R* e4 @# F. N7 i
    其实上面说这些都是比较基础,比较简单的,还有复杂一点的,都在这张表里) N9 m- A2 |; c$ y! B! o

    ! w" o! G, @  B9 F' N* z, f$ y- I& u; Z2 [8 M

    8 E& |) M' g6 F match用法🤔& Y2 j7 [' K: b# x* d: o3 }6 G
    match用法😃
    - k: `. h: l) @4 I$ Z( h1 z语法:re.match(pattern, string[, flags])  
    ) s; W& J% W( J0 i5 }" m1 a, N5 J$ c# Z1 p, |" o( m5 R% @; ?
    从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。0 [. `9 a0 k2 V0 s4 P

    * x4 \3 ~4 P) X$ l3 c" Y7 r: @( H#示例:
    2 S) M" I3 n' l5 m$ k- |$ Bname='张三'
    ( ^9 {: }6 l$ N( K- }2 Nif re.match('张\w+',name):7 l( n+ {" x$ C; f9 c' b
        print('{},你好!'.format(name))! `" f8 A% Z- l7 C& R
        # 张三,你好!' W' x( D. a+ o0 x
    输出结果:张三,你好  L" P1 x7 w9 z+ n8 }6 @4 M9 b

    - e" v% u+ V) C2 I9 W( Q  M/ ]: N  w* X, e9 z! W1 \

    9 o1 J# y( K- V. F( S4 T3 R张三:谁叫我?
    7 Y/ k3 z6 \( e: n. \  z2 B& w* m) d8 E4 M5 N( }$ k
    不开玩笑了,继续7 b9 `0 U/ Y1 M' F. D% [8 W

    * _7 J% I4 l$ P总的来说,match就是9 F1 M/ d: \$ ]7 P% E
    9 U8 J% u& X- K5 Z; {  A( z
    返回匹配的match对象6 |3 Q! A& }; f( n/ `; E% G( b8 r
    默认从给定字符串的开头开始匹配、即使正则表达式没有用^声明匹配开头
    1 W+ O. \  r7 A6 ~ match对象🍊: A* s8 C3 {& E  W; U8 b
    Match对象的几个属性:
    : A, g. O  Z7 B* ?# K: t+ g& T/ \& {, [2 N
    注意,前面是有“.”的
    1 {8 j5 m3 {- Q, j. o) P1..string 待匹配的文本
    ' ~6 Z) H) a) d  Z' x8 f2..re 匹配使用的pattern对象
    2 |' L: j4 n: G& W# x* p8 g3..pos 正则表达式搜索文本的开始位置4 n0 M, _6 e* p+ K+ O- [, n# H
    4..endpos 正则表达式搜索文本的结束位置
    & h% A, G, i# o7 T7 {& ]Match对象的几个方法:
    % D$ N3 G! r) e2 J/ V8 s7 t/ A$ T1.group(0) 返回匹配到的子串5 D8 j; J! Y$ |) J8 A8 o
    2.start() 返回匹配子串的开始位置
    , u; @( j; X9 m- Q( e& z7 n3.end() 返回匹配子串的结束位置
    : s" O% w; p/ i5 c- F6 t9 v- }4.span() 返回start()、end()  m; u! R1 j* M; M. n
    ) O6 e5 E& T. p8 g5 F- D
    数量词🍊# P  i' v3 I$ z* Z* b
    ' u3 X  H4 p5 d! n/ ]8 U9 x

    # h) H, m# }% j+ U" ?匹配开头、结尾🍊
    5 d% y# r+ F- ?8 a5 d8 T% E$ {3 T$ S' w9 @2 R( y# l; o; s: k
    匹配分组🔍
    + V; z, N+ L) w& i4 ^/ i+ h2 C! V# W0 A3 ^7 e* ]

    ! |9 I5 m! |4 ^3 N3 ?9 \/ y5 s+ D好了,看了上面几张表,其实我觉得最重要的在下面  " P2 }  N& {7 A0 R

    * u7 D$ c, j; ^2 d5 q8 Fmatch总结😄! W/ e6 Z1 r6 X9 g* X
    其实没啥好总结的,但你要看懂这张图,这个很重要
    5 C+ [7 N2 ^. u- ~7 x; W1 l( f0 g9 y9 R1 O

    6 @9 T( M! j$ a. k1 i0 ~8 A( u* _: p1 d3 \6 m; d
    我框出来的是我自己感觉经常用的
    & T6 v9 ]' U, A6 W7 z# V- v
    : h: n6 L0 k. C, Q* ~6 ]! C3 M# h& q其实我自己刚学的时候也听不懂,现在觉得可简单了
    - Q% U' v* d" F% j/ H8 [/ I9 d/ G
    所以,你应该现在就觉得很简单吧?2 _" M- C" ], \7 P

    - R# u1 t7 x' A# Z/ M3 e' `但是,正则表达式的字符很多,容易记混,一不小心就好几十个报错,很让人崩溃' l, ?9 R4 R7 s1 X" r

    1 X5 O0 y8 G7 M9 M2 H
    * k1 j' t7 U4 N$ b2 \% Z/ _4 ?* e2 O8 K0 T5 c6 \$ j1 i2 q
    实践出真知 凸(`0′)凸 ☀️
    ( w1 s1 X% s: m8 }) H1 Y+ i2 i学了这么多,是不是想撸个程序了?
    3 ~. Q" T2 R; w6 V! s; s
    5 S5 h9 r  T0 `) x( Z6 N& Z- q已经给你准备好了* P. U+ ^" n8 @+ I& \

    1 \/ M# x) j$ U! N: t8 M程序效果:输入手机号,通过正则表达式判断手机号合不合法,4 V6 H/ q8 ?: B2 v2 M' a

    % T8 P6 V1 K* l9 w7 h$ M7 Y- T如果合法,就输出这个手机号的信息(所属地等)5 B. C$ T! r* p
    . N9 n. r4 I, f- r" s# K
    如果不合法,就重新输入,简单吧?0 E  u# x- s4 V& Q1 `2 @

    & G9 Q* e2 c% ]$ `# n$ v# ^: s这里我想重点说一下怎么获取手机号的信息
    + x; u1 ~2 |- }6 r
    4 z* f8 ]3 U7 K# z5 T, O我一开始打算上网上百度一波的,没想到直接复制过来23个报错、我也是醉了
    ; O- Y+ H5 I* {3 m" d  @1 M8 d: q8 z1 V3 A! B
    % H" ?' s# L  ~" G
    ( a& {1 a# [8 W
    哎呀,不能再发表情包了
    ! o7 d  ?8 f/ {; h1 q) U
    & @- T  `6 c! N) k4 [
    3 c. \/ U0 K2 q5 i7 [0 ?( P' F1 y6 W/ z  Q5 n8 v
    ε=(′ο`*)))唉,还是自己写吧、、、
    * P9 R) w1 S. m; G: \
    ( x; c; z: V$ u9 z我想起了有个模块叫phone,可以实现这个功能
    ) j1 T, X0 ~* d. O/ C% y( j/ a9 j5 ~6 U( N/ R1 v7 E
    但是你可能还没有安装这个模块,要按命令行模式下输入pip install phone1 _- S5 {" e0 @5 X

    2 r3 |6 m% m; |9 o等个六六四十九秒就下载下来了
    1 P7 Z# [2 [" X9 I3 j1 b; ^$ }' r1 [( `) N
    然后你就可以体验一下了' G5 F: K; m& O* I
    , G4 i. t: c* }
    代码(PyCharm运行通过); R6 s4 s# c! l( @

    ( \$ ]; c9 A5 Y  E9 Ximport phone; D9 N" p( ]& X. M8 o& v# u# u; o
    from time import *
    : S3 [5 x1 m7 s  W  @& @  Himport re
    % b8 _8 ~& W5 S8 Q* H2 T! r  D6 E
    3 P* O0 w( d. g7 cdef begin():
    / m* V, ~0 u  M- h( k: X    print("欢迎来到查询小程序")0 h; B  |7 h2 `3 b
        print("1.查询")  O2 F  G3 d0 J
        print("2.用户")
    5 g; u7 T, B/ G& J# ?
    & z" w& ~, l( A$ C* E  d
    ; Y1 q! X! ^. j6 udef p(n):
    . j) G2 L$ [: W9 u  F7 u    if re.match(r'1[3,4,5,7,8]\d{9}', n):
    ! [7 L: z# X' A7 h7 h# y        if re.match(r'13[0,1,2]\d{8}', n) or \
    4 }5 p  o& a1 O6 k& z, C                re.match(r"15[5,6]\d{8}", n) or \7 z* P" ~) r& }4 a) F/ H
                    re.match(r"18[5,6]", n) or \
    & K. r( ?7 M- R' ~                re.match(r"145\d{8}", n) or \1 a% S5 t. p; A3 @
                    re.match(r"176\d{8}", n):
    1 p4 e# Z( r' \- C8 {) x            return True
    * L! U9 d- h6 P        elif re.match(r"13[4,5,6,7,8,9]\d{8}", n) or \3 v: @6 i' }/ n7 w9 U- y
                    re.match(r"147\d{8}|178\d{8}", n) or \. Q& k1 Y& B$ j
                    re.match(r"15[0,1,2,7,8,9]\d{8}", n) or \, [% ^% E1 x4 o( x7 [/ M$ A" E
                    re.match(r"18[2,3,4,7,8]\d{8}", n):
    " L( D+ H' b  M( O* W            return True
    ; h! q) H5 A0 i        else:
    , r7 E! N7 N) v9 p. p1 [5 z& N            return True
    9 \/ M+ d4 B( [* O3 y( D/ y. L    else:% U& j8 U2 ^/ S' ?1 t# {7 h5 y
            return False4 n. l( {. N0 g# n9 \5 d

    5 X# h. M9 J  Fif __name__ == "__main__":% I1 w) w( h3 S2 k4 n* P/ r. k, G
        s=06 J3 Z! G& Z) y3 R
        begin()4 p/ F; A8 G5 i
        while True:: ~: R# d; M+ E& e
            op = int(input("请输入:"))
    $ m# ^' e, `& a        if op==1:2 r4 v& {4 J' f& T, S% D# r0 t
                phoneNum = str(input("请输入你的电话号码"))
    0 _( Z  Y. S- ]            if p(phoneNum)==False:# T& u0 F* ]; b5 `. P. D2 D. y8 r$ N
                    print("该手机号无效")  n) Q/ h. M8 S6 S
                    for i in range(100):
    7 w8 Q8 a3 r2 u! P8 B% D                    print('\n')0 B+ K& O( K2 F
                    begin()
    ! R% E. e2 Y" y" Y; G( I            else:
    & X" [$ N3 y- f+ _, }: a; }: b% `6 o                info = phone.Phone().find(phoneNum)9 m9 Y6 ~% I$ c5 n- A
                    print("手机号码:"+str(info["phone"]))9 M3 d9 ?5 K+ Q0 Y$ j5 s5 G
                    print("手机所属地:"+str(info["province"])+"省"+str(info["city"])+"市")7 f4 s* Q5 E8 E" a7 y: v9 L
                    print("邮政编号:"+str(info["zip_code"]))$ B' x3 \$ v7 W; k6 \! b$ N
                    print("区域号码:"+str(info["area_code"])), c9 j# R8 U2 q) a0 }% M. q# S
                    print("手机类型:"+str(info["phone_type"]))5 a/ i3 [7 ]- @
                    s+=12 \9 b$ w) F8 P, ~( j: S/ V0 }
                    i = input("输入任意数退出...")* K! E$ s6 ~2 E0 c; B3 f
                    for i in range(100):% ~0 H* L% O1 }% \1 N8 J) Y" A
                        print('\n')
    / A2 r) O1 F+ x5 K( q                begin()6 _, A9 k$ U, l6 \$ O2 W6 T
            if op==2:6 n( u; l+ j' Q% U$ i: b
                print("使用次数:"+str(s))$ ?" ?& b3 s0 G, U- i
                i = input("输入任意数退出...")
      t, s- Y3 V" l6 }" Z& w            for i in range(100):
    1 i7 B' r3 J8 t$ k. a1 Y( ?                print('\n')6 f/ @" o& W6 h& m( j' Z
                begin(). t* j; G% P3 l8 K7 f

    , x: Y/ R: p& |写在最后🧐
    ; t8 k5 K/ F$ O7 N2 m+ t" ^/ `————————————————
    ! |6 r: m: p; w  ?版权声明:本文为CSDN博主「YR_T」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    / W% ~+ Y1 s/ {1 P( [. ?# r1 J原文链接:https://blog.csdn.net/m0_64036070/article/details/123853489$ k- b1 b6 v, {% U$ J8 G

    ; l0 c4 G4 j/ P+ u( ^0 D. ]  k/ `) L/ ^! d$ B6 G0 k
    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-26 05:14 , Processed in 0.359863 second(s), 51 queries .

    回顶部