• 技术文章 >常见问题 >Python常见问题

    python里的re是什么

    silencementsilencement2019-09-04 15:05:47原创5381

    定义

    正则表达式是一个特殊的字符序列,能方便的检查一个字符串是否与某种模式匹配。re模块使得python拥有全部的正则表达式功能。

    用途

    通过使用正则表达式,可以:

    测试字符串内的模式。—— 例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。

    替换文本。—— 可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。

    基于模式匹配从字符串中提取子字符串。—— 可以查找文档内或输入域内特定的文本。

    语法

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    '.'     匹配所有字符串,除\n以外

    '-'     表示范围[0-9]

    '*'     匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。

    '+'     匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+

    '^'     匹配字符串开头

    '$'     匹配字符串结尾 re

    '\'     转义字符, 使后一个字符改变原来的意思,如果字符串中有字符*需要匹配,可以\*或者字符集[*]

            re.findall(r'3\*','3*ds')结['3*']

    '*'     匹配前面的字符0次或多次 re.findall("ab*","cabc3abcbbac")结果:['ab', 'ab', 'a']

    '?'     匹配前一个字符串0次或1次 re.findall('ab?','abcabcabcadf')结果['ab', 'ab', 'ab', 'a']

    '{m}'   匹配前一个字符m次 re.findall('cb{1}','bchbchcbfbcbb')结果['cb', 'cb']

    '{n,m}' 匹配前一个字符n到m次 re.findall('cb{2,3}','bchbchcbfbcbb')结果['cbb']

    '\d'    匹配数字,等于[0-9] re.findall('\d','电话:10086')结果['1', '0', '0', '8', '6']

    '\D'    匹配非数字,等于[^0-9] re.findall('\D','电话:10086')结果['电', '话', ':']

    '\w'    匹配字母和数字,等于[A-Za-z0-9] re.findall('\w','alex123,./;;;')结果['a', 'l', 'e', 'x', '1', '2', '3']

    '\W'    匹配非英文字母和数字,等于[^A-Za-z0-9] re.findall('\W','alex123,./;;;')结果[',', '.', '/', ';', ';', ';']

    '\s'    匹配空白字符 re.findall('\s','3*ds \t\n')结果[' ', '\t', '\n']

    '\S'    匹配非空白字符 re.findall('\s','3*ds \t\n')结果['3', '*', 'd', 's']

    '\A'    匹配字符串开头

    '\Z'    匹配字符串结尾

    '\b'    匹配单词的词首和词尾,单词被定义为一个字母数字序列,因此词尾是用空白符或非字母数字符来表示的

    '\B'    与\b相反,只在当前位置不在单词边界时匹配

    []      是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s*]表示空格或者*号

    '(?P<name>...)'  分组,除了原有编号外在指定一个额外的别名

    re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{8})","371481199306143242").groupdict("city")

    结果{'province': '3714', 'city': '81', 'birthday': '19930614'}

    模式

    贪婪模式和非贪婪模式

    正则表达式通常使用于查找匹配字符串。python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符;非贪婪模式正好相反,总是尝试匹配尽可能少的字符。

    使用方法

    在python中默认采用的是贪婪模式,使用非贪婪模式的话,只需要在量词后面直接加上一个问号”?”。

    例子当中已经匹配到了“ab”时已经可以使整个表达式匹配成功,但是由于采用的是贪婪模式,所以还需要往后继续匹配,一直到匹配到最后一个”b”的时候,后面已经没有可以成功匹配的字符串了,匹配结束。返回匹配结果“abbbbbb”。 所以,我们可以将贪婪模式理解为:在整个表达式匹配成功的前提下,尽可能多的匹配。

    非贪婪模式也就是将我们例子中的正则表达式“ab+”改为”ab+?”,当匹配到“ab”时,已经匹配成功,直接结束匹配,不在向后继续尝试,返回匹配成功的字符串”ab”。

    所以,我们可以将非贪婪模式理解为:在整个表达式匹配成功的前提下,尽可能少的匹配。

    专题推荐:正则表达式
    上一篇:python里面for什么意思 下一篇:python如何逐行读取数据

    相关文章推荐

    • python 如何安装redis• python里面for什么意思

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网