2018-09-11 day-17正则表达式(含作业)

1.正则表达式

正则表达式就是用来检测字符串是否满足某种规则的工具。

2.正则语法

----------------------单个字符-----------------------------------
1) . 匹配任意字符:匹配一个字符串,只有一位字符并这个字符是任意字符

2) \w 匹配字母数字下划线(一位)

3) \s 匹配空白字符(空白指空格,制表符(\t)和回车(\n)等所有能产生空白的字符)

4) \d 匹配一个数字字符

5) \b 检测是否是单词边界(单词的开头,单词的结尾,单词和单词之间的标点空格等)
注意:正则中遇到\b,匹配的时候先不管它,匹配成功后再回头看\b位置是否是单词边界

6) ^ 检测字符串是否以给定的正则表达式开头(开头)

7) $ 检测字符串是否以给定的正则表达式结束。

8) \W 匹配一个非数字,字母,下划线的字符

9) \S 匹配非空白字符

10) \D 匹配一个非数字字符

11) \B 检测非单词边界
----------------------匹配次数-----------------------------------
1) []  匹配中括号中出现的任意字符。注意:(一个中括号匹配一个字符)。
-在正则中的中括号中的应用:
[1-8]:代表1~8
[-18]或者[18-] 代表'1' ,'8','-'

2) [^] 匹配不在[]字符集中的任意一个字符

3) * 匹配0次或多次

4) + 匹配1次或多次

5) ? 匹配0次或者一次

6) {N} 匹配N次

7) {M,} 至少匹配M次

8) {,N} 最多匹配N次

9) {M,N} 匹配至少M次,最多N次。要求N > M

python
------------------------------分支和分组------------------------
1)  | 分支(相当于逻辑运算中的or)
注意:正则中的分支有短路操作(前面的分支满足不会执行后面。前面是个整体.)

2) 分组:通过加()分组.

3).捕获:安装完整的正则表达式去匹配,只捕获()中的内容。只有在findall中有效

3.python对正则表达式的支持(re模块)

1.内置的模块:re

1.fullmatch(正则表达式,字符串):判断整个字符串是否符合正则表达式的规则。如果匹配成功返回匹配对象,否则返回None

2.compile(正则表达式):将正则表达式转换成正则表达式对象

3.mach(正则表达式,字符串):判断字符串的开头是否能和正则表达式匹配。(前面匹配到了,后面不管如何都。)如果匹配成功返回匹配对象,否则返回None

4.search(正则表达式,字符串):在字符串中去查找第一个满足正则表达式要求的子串。如果找到了就返回匹配对象,否则None(只要的满足的一个,找到了就停止。)

5.split(正则表达式,字符串):按满足正则表达式的子串去切割字符串。

6.sub(正则表达式,替换字符串,字符串):返回值是新的字符串

7.findall(正则表达式,字符串):就是完整版的search()(获取所有满足的)返回值是列表。
注意:分组中的捕获效果在这个有效

4.正则里面的转义

注意:正则表达式中的转义和字符串中的转义字符没有任何关系。
在正则表达式中,可以通过在有特殊意义的符号前加''来表示符号本身

\+   \.   \*    \?   \\   \( \)  \[ \]  \^  \$  \|
1.'-'只有在中括号中的两个字符之间才有特殊意义。
2.如果特殊符号放在[]中作为字符集的内容,除了'-'在两个字符之间以外,其他的都不需要转义。
3.'\'不管在哪都需要转义
4.^放在[]最前面需要转义,不然表示非
str1 = r'a\+'

作业

1.IP匹配

re_str = r'(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})(\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})){3}'
print(re.fullmatch(re_str,'19.23.22.235'))
'''
<_sre.SRE_Match object; span=(0, 12), match='19.23.22.235'>
'''

2.邮箱匹配

re_str = r'^[0-9a-zA-Z]{,26}@[a-z]{,10}\.[a-z]{,5}'
print(re.fullmatch(re_str,'123txf@qq.com'))

'''
<_sre.SRE_Match object; span=(0, 13), match='123txf@qq.com'>
'''
  1. 计算一个字符串中所有的数字的和
    例如:字符串是:‘hello90abc 78sjh12.5’ 结果是90+78+12.5 = 180.5

def num_mach(str1):
    re_str = r'[-+]?[1-9]+[.]\d+|[+-]?\d+'
    result = re.findall(re_str,str1)
    sum = 0

    for num in result:
        sum += float(num)
    return sum

print(num_mach('hello90abc 78sjh12.5'))

180.5
  1. 验证输入的内容只能是汉字
re_str = r'[\u4E00-\u9FA5\\s]+'

print(re.fullmatch(re_str,'啥借口多好看教案'))
  1. 电话号码的验证
re_str = r'13[0-9]{8}|147\d{8}|15[0-9]\d{8}|18[1-9]\d{8}'
print(re.fullmatch(re_str,'18189898973'))
  1. 简单的身份证号的验证
re_str = r'^([1-9]\d{5}[12]\d{3}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])\d{3}[0-9xX])$'
print(re.fullmatch(re_str,'528283826374758379'))

二、不定项选择题

  1. 能够完全匹配字符串“(010)-62661617”和字符串“01062661617”的正则表达式包括( A BD )

A. “(?\d{3})?-?\d{8}”
B. “[0-9()-]+”
C. “[0-9(-)]\d
D. “[(]?\d[)-]\d*”

re_str = r'\(?010\)?\-?62661617'
print(re.fullmatch(re_str,'(010)-62661617'))
  1. 能够完全匹配字符串“c:\rapidminer\lib\plugs”的正则表达式包括( BC )
    A. “c:\rapidminer\lib\plugs”
    B. “c:\rapidminer\lib\plugs”
    C. “(?i)C:\RapidMiner\Lib\Plugs” ?i:将后面的内容的大写变成小写
    D. “(?s)C:\RapidMiner\Lib\Plugs” ?s:单行匹配

  2. 能够完全匹配字符串“back”和“back-end”的正则表达式包括( ACD)
    A. “\w{4}-\w{3}|\w{4}” match->back,back-end fullmatch-> back,back-end
    B. “\w{4}|\w{4}-\w{3}” match-> back, back fullmatch-> back,back-end
    C. “\S+-\S+|\S+”
    D. “\w\b-\b\w|\w*”

  3. 能够完全匹配字符串“go go”和“kitty kitty”,但不能完全匹配“go kitty”的正则表达式包括(AD )
    :\1就是重复前面第一个()/组合里面的内容
    :\2就是重复前面第二个()/组合里面的内容
    A. “\b(\w+)\b\s+\1\b”
    B. “\w{2,5}\s*\1”
    C. “(\S+) \s+\1”
    D. “(\S{2,5})\s{1,}\1”

  4. 能够在字符串中匹配“aab”,而不能匹配“aaab”和“aaaab”的正则表达式包括( B,C)
    A. “a*?b”
    B. “a{,2}b”
    C. “aa??b”
    D. “aaa??b”

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • python的re模块--细说正则表达式 可能是东半球最详细最全面的re教程,翻译自官方文档,因为官方文档写的是真...
    立而人阅读 23,412评论 4 46
  • Python中的正则表达式(re) import rere.match #从开始位置开始匹配,如果开头没有则无re...
    BigJeffWang阅读 7,539评论 0 99
  • re模块手册 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以...
    喜欢吃栗子阅读 4,183评论 0 13
  • 本文是为了给知识研习社群内小伙伴做分享而整理的一些内容。结合个人近八年从事英语翻译的工作经验简单谈一下翻译这种职业...
    玛莉随心记阅读 2,000评论 1 8
  • 秋天,北方,大阳片。 舍不得离开北方,这高阔蓝天白云和太阳真的是舍不得离开的理由前三名0。 就好像现在,公交车徐徐...
    大海真可怕阅读 386评论 0 0

友情链接更多精彩内容