xkdn

r\'[\u4e00-\u9fa5]汉字

.匹配除换行符外的任意字符

\d匹配所有数字 ,与[0-9]相同[0123456789]

\D匹配非数字字符,[^0-9]

\w匹配数字,字母,下划线[0-9a-zA-Z_]

\W匹配非数字 字线 下划线[^0-9A-Za-z]

\s匹配任意空白符(空格  换行 换页符 制表符 回车,同[  \f\n\r\t]
\S匹配任意非空白符(空格  换行 换页符 制表符 回车,同[^  \f\n\r\t]

^行首匹配
$行尾匹配
\A 匹配字符串开始,只匹配整个字符串的开头.与^区别:即使与re.M配合也只能匹配当前行行首,不会匹配其他行的行首

\Z匹配字符串结束,只匹配整个字符串的结束.与$区别:即使与re.M配合也只能匹配当前行行尾,不会匹配其他行的行尾

>>> print(re.search(r"\AI","I\'m a never"))
<re.Match object; span=(0, 1), match=\'I\'>
>>> print(re.search(r"I\Z","I\'m a never"))
None
>>> print(re.search(r"r\Z","I\'m a never"))
<re.Match object; span=(10, 11), match=\'r\'>
>>>

\b匹配一个单词的边界,就是单词和空格间的位置

\B匹配非单词的边界

>>> print(re.search(r\'er\b\',"never"))
<re.Match object; span=(3, 5), match=\'er\'>
>>> print(re.search(r\'er\B\',"never"))
None
>>>

(abc)匹配abc这三个字符组合串

(abc)?匹配0个或1个abc

(abc)*匹配0个或任意多个abc

.*匹配0个或任意个字符(换行符除外)

(abc)+匹配至少一个abc

(abc){2,5}匹配2或3或4或5个abc

 

import re
aa="this di  df    er   dman man"
print(re.split(r" +",aa))上

上面的代码是用正则分割字符
结果:

===================== RESTART: D:/Python/Python37/re2.py =====================
[\'this\', \'di\', \'df\', \'er\', \'dman\', \'man\']
>>>

 

import re
aa=r\'[0-9a-zA-Z_]\'#匹配任意一个数字字母或下划线
print(re.search(aa,"dsfs345355"))
rr="i an dfef fgdei fdfeffd"
rra=re.finditer(r\'fe\',rr) #与findall类似,查找整个字符串,但不将结果一次性放到内存中,而返回一个迭代器
for i in rra:   #用循环返回结果
    print(i.group())
print(".........")
rra=re.finditer(r\'df\',rr)
while True:   #利用循环与next结合返回结果
    try:
        ia=next(rra)  #迭代器用next返回
        print(ia.group())
    except StopIteration as e:
        break上

上面的代码是finditer:查找到的每个结果,用其group()返回其具体结果值
findall 返回一个包含所有匹配到的字符的列表,列表类以元组的形式存在。
finditer 返回一个可迭代对象。
结果:

===================== RESTART: D:\Python\Python37\re1.py =====================
<re.Match object; span=(0, 1), match=\'d\'>
fe
fe
.........
df
df
>>>

 

import re
aa=r\'[0-9a-zA-Z_]\'#匹配任意一个数字字母或下划线
print(re.search(aa,"dsfs345355"))
rr="i an dfef fgdei fdfeffd"
#sub subn:在目标字符串中以正则表达式的规则匹配字符串,再把其替换成指定的字符串,可以指定替换次数。如果不指定默认替换所有符合目标对象
#sub直接返回替换后的结果;subn:返回元组:替换后的结果,替换的次数
rrb=re.sub(r\'df\',"gg",rr)
rrbb=re.subn(r\'df\',"gg",rr)
print(rrb)
print(rrbb)
print("..............")
strb="sunck is a go0534-3456776od man!sunck is 020-45343422a nice man! sunk is good man 010-53247654"
stra="010-33434344"
m=re.match(r"(\d{3})-(\d{8})",stra)  #match从最左边匹配
print(m)
print(m.group(0))
print(m.group(1))
print(m.group(2))
print(">>>>>>>>>>>>")
ma=re.findall(r"(\d{3}-\d{8})",strb)
mab=re.findall(r"(\d{4}-\d{7})",strb)
maa=re.findall(r"((\d{3}-\d{8})|(\d{4}-\d{7}))",strb)
print(ma)
print(maa)
print(mab)   

 结果:

===================== RESTART: D:\Python\Python37\re1.py =====================
<re.Match object; span=(0, 1), match=\'d\'>
i an ggef fgdei fggeffd
(\'i an ggef fgdei fggeffd\', 2)
..............
<re.Match object; span=(0, 12), match=\'010-33434344\'>
010-33434344
010
33434344
>>>>>>>>>>>>
[\'020-45343422\', \'010-53247654\']
[(\'0534-3456776\', \'\', \'0534-3456776\'), (\'020-45343422\', \'020-45343422\', \'\'), (\'010-53247654\', \'010-53247654\', \'\')]
[\'0534-3456776\']
>>>

 

dd=\'\'\'sdxxhello
xxfsdfxxworldxxasdf\'\'\'
d=re.findall(\'xx(.*?)xx\',dd)
print(d)
d=re.findall(\'xx(.*?)xx\',dd,re.S) #re.S表示跨行匹配,没有则不跨行
print(d)

结果:

[\'fsdf\']
[\'hello\n\', \'world\']
>>>

 


re.match(r\'.\',"abvd")  #匹配最左边开始的字符

re.search(r\'.\',"abdd") #匹配整个字符串中第一个符合条件的字符

re.findall(r\'.\',"abcd") #匹配整个字符串中所有符合条件的字符

分类:

技术点:

相关文章:

  • 2021-11-22
  • 2021-11-26
  • 2021-12-27
猜你喜欢
  • 2021-05-17
  • 2021-12-18
  • 2021-12-18
  • 2021-12-18
  • 2022-01-04
相关资源
相似解决方案