python3 正则表达式基础廖雪峰_python

来源:脚本之家  责任编辑:小易  

#只对中文标点符号有效 pattern = r'(“.+?[。!?]”|[。!?](?!”))' s = re.sub(pattern,'\\\\1\\n',s) print(s)

字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在。比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦,而且代码难以复用。

用列表推导式来实现,供参考。 >>> raw_list = ['A_rig', 'B_obj', 'F_rig', 'H_obj', 'T_rig'] >>> new_list = [i f

正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。

你的正则表达式使用了贪婪模式的匹配(.*),应该用非贪婪模式,正则表达式应该为<a href="/(.*?)-desktop-wallpapers.html完整的python语言程序如下#!/usr/bin/python3 &nb

所以我们判断一个字符串是否是合法的Email的方法是:

    \\\\表示匹配一个\\\\t表示匹配一个TAB(制表符)\\s表示匹配一个任何不可见字符(包括空格、制表符、换页符等)所以整个表达式的意思是匹配先一个\\,后面加一个制表符然后是一个非

    创建一个匹配Email的正则表达式;

    写的复杂一点,不过应该能满足要求: /^(\d|[a-zA-Z])*((\d[a-zA-Z])|([a-zA-Z]\d))(\d|[a-zA-Z])*$/ 位数的话,再判断下匹配位置是否大于10 就可以了。

    用该正则表达式去匹配用户的输入来判断是否合法。

^\\d{1,3}(,\\d{3})*$完整的Python语言的程序如下#!/usr/bin/python  import re str ='1,234,567' regex = r'^\\d{1,3}(,\\d{3})*$' m

因为正则表达式也是用字符串表示的,所以,我们要首先了解如何用字符来描述字符。

这个压根用不上正则表达式。 比如你要提取“有中”中间的信息,直接用字符串截取不就行了,因为你的是没有规则的字符串。 假如这中间信息含有 干燥剂 或者 发明了。。

在正则表达式中,如果直接给出字符,就是精确匹配。用\d可以匹配一个数字,\w可以匹配一个字母或数字,所以:

那是因为正则表达式r'a(.+?)b|wz's和sd的结果在第一捕获组中,而wz在第0捕 结果都在第0捕获组中完整的两种方法的Python程序如下#!/usr/bin/python  impo

'00\d'可以匹配'007',但无法匹配'00A'

'\d\d\d'可以匹配'010'

import re A = '''METAR ZBAA 230330Z 13002MPS 090V170 CAVOK 32/22 Q1006 

'\w\w\d'可以匹配'py3'

一个简捷的方法是, try: re.compile('xxx');catch: # 如果有异常发生,说明不是合法的正则 这样是python语法来判断的。

.可以匹配任意字符,所以: 'py.'可以匹配'pyc''pyo''py!'等等。

rex = r'[^abcde]*'re.match(rex, 'this is a string')返回值是None则不匹配,反之匹配 当然先compile一下也很好。

要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符:

>>> import re >>> p = re.compile(r'\d+') >>> p.findall('vid:122313') ['122313'] >>> 如果这个字符串里面只

来看一个复杂的例子:\d{3}\s+\d{3,8}

我们来从左到右解读一下:

    \d{3}表示匹配3个数字,例如'010'

    \s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配' '' '等;

    \d{3,8}表示3-8个数字,例如'1234567'

综合起来,上面的正则表达式可以匹配以任意个空格隔开的带区号的电话号码。

如果要匹配'010-12345'这样的号码呢?由于'-'是特殊字符,在正则表达式中,要用'\'转义,所以,上面的正则是\d{3}\-\d{3,8}

但是,仍然无法匹配'010 - 12345',因为带有空格。所以我们需要更复杂的匹配方式。

进阶

要做更精确地匹配,可以用[]表示范围,比如:

[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;

[0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100''0_Z''Py3000'等等;

[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;

[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精确地限制了变量