python之(re)正则表达式上

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之(re)正则表达式上相关的知识,希望对你有一定的参考价值。

python正则表达式知识预备

 

     正则表达式使用反斜杠" \\ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用" \\\\\\\\ "表示正则表达式中的" \\ ",因为正则表达式中如果要匹配" \\ ",需要用\\来转义,变成" \\\\ ",而Python语法中又需要对字符串中每一个\\进行转义,所以就变成了" \\\\\\\\ "。

     上面的写法是不是觉得很麻烦,为了使正则表达式具有更好的可读性,Python特别设计了原始字符串(raw string),需要提醒你的是,在写文件路径的时候就不要使用raw string了,这里存在陷阱。raw string就是用‘r‘作为字符串的前缀,如 r"\\n":表示两个字符"\\"和"n",而不是换行符了。Python中写正则表达式时推荐使用这种形式。

问题:如何匹配到‘\\com’

 

# r9 = re.search(‘\\\\\\\\‘, ‘www.run\\comoob‘)
# print(r9)       #匹配到‘\\’   ‘\\\\\\\\‘  python  将其翻译为‘\\\\‘  re 模块将其编译为‘\\‘

上面太麻烦了,明显不符合实际操作,看下面的:

r10 = re.search(r‘\\\\com‘, ‘www.run\\comoob‘)   #加r , 表示python 不翻译,re 翻译
print(r10)

 

#f = open("c:\\abc.txt")   #错误  应该是f = open("c:\\\\abc.txt")
r7 = re.search(r‘\\\\com‘, ‘www.run\\comoob‘)   #注意:匹配到‘\\com‘  翻译到屏幕是‘\\\\com‘
print(r7)

 

 

学习正则表达式

   接下来系统学习正则表达式,文章有点长,希望不懂的同学可以耐心看下去,我会多举例的

先大致看下,后面会举例:

字符:

  . 匹配除换行符以外的任意字符
  \\w 匹配字母或数字或下划线或汉字
  \\s 匹配任意的空白符
  \\d 匹配数字
  \\b 匹配单词的开始或结束
  ^ 匹配字符串的开始
  $ 匹配字符串的结束

 

次数:

  * 重复零次或更多次
  + 重复一次或更多次
  ? 重复零次或一次
  {n} 重复n次
  {n,} 重复n次或更多次
  {n,m} 重复n到m次

 

 

正则表达式本身就是小型编程语言,使用之前肯定要先导入啦,下面实例默认都是导入的。


一、了解findout,及字符
   1. findout  把匹配结果通过列表返回

            

r =re.findall(‘zcl‘, ‘fzclfjfrijzclfeizcfj‘)
print(r)  #[‘zcl‘, ‘zcl‘]

 

   2.   .  匹配到除换行符以外的任一个字符
r1 =re.findall(‘z.l‘, ‘fzolfjfrijzclfeizcfj‘)
print(r1)    #[‘zol‘, ‘zcl‘]
r1 =re.findall(‘z.l‘, ‘fz\\nlfjfrijzclfeizcfj‘)
print(r1)    #[‘zcl‘]

 

      3.  ^ (shift+6)区配到以 xx字符开头

r2 =re.findall(‘^z.l‘, ‘fz\\nlfjfrijzclfeizcfj‘)
print(r2)   #[]
r3 =re.findall(‘^z.l‘, ‘zcllfz\\nlfjfrijzclfeizcfj‘)
print(r3)   #[‘zcl‘]

 

     4.   $ 匹配到以xx结束的字符

r4 =re.findall(‘z.l$‘, ‘zcllfz\\nlfjfrijzclfeizcfj‘)
print(r4)      #[]
r5 =re.findall(‘z.l$‘, ‘zcllfz\\nlfjfrijzclfeizcfjzcl‘)
print(r5)     #[‘zcl‘]

     

  5.   * 区配*前面的字符0到多次

     +  重复一次或更多次
r6 =re.findall(‘z.*l‘, ‘zcgfchthllfz\\nlfjfrijzclfeizcfjzcl‘)
print(r6)     #[‘zcgfchthll‘, ‘zclfeizcfjzcl‘]

r7 =re.findall(‘z.+l‘, ‘zcgfchthfz\\nlfjfrijzcfeizcfjzc‘)
print(r7)     #[]

 

   6.  {n} 重复n次

   {n,m}  重复n到m次
  {n,} 重复n次或更多次
r8 = re.findall(‘zc{3}l‘, ‘zccclgfchthfz\\nlfjfrijzcfeizcfjzc‘)
print(r8)       #[‘zcccl‘]

 

  7. [bc] 匹配b或c

r9 = re.findall(‘a[bd]c‘, ‘dfjabdcdjfabcdf‘)
print(r9)

 

  8. [a-z] 匹配a至z任意一个

r9 = re.findall(‘a[a-z]c‘, ‘dfjabdcdjfatcdf‘)
print(r9)      #[‘atc‘]

 

  9. [] 里面仍有功能有三个:  [a-z]   [\\d]区配数字  [^] 非  
r10 = re.findall(‘a[^f]d‘, "afd")
print(r10)     #[]
r11 = re.findall(‘a[^f]d‘, "ard")
print(r11)    #[‘ard‘]
r12 = re.findall(r‘a\\df‘, "a8f")
print(r12)   #[‘a8f‘]

 

 

欢迎转发!
This is zcl‘s article! Thanks for your support!
文章出处:http://www.cnblogs.com/0zcl
作者:zcl



 





















以上是关于python之(re)正则表达式上的主要内容,如果未能解决你的问题,请参考以下文章

Python基础之re模块(正则表达式)

python之基础篇——正则表达式RE模块

python基础之正则表达式和re模块

python模块之re正则表达式

python模块之re正则表达式

Python基础(13)_python模块之re模块(正则表达式)