zoukankan      html  css  js  c++  java
  • Python正则表达式返回首次匹配到的字符及查询的健壮性

    re.findall(pattern,string)会搜索所有匹配的字符,返回的是一个列表,获取首个匹配需要re.findall(pattern,string)[0]访问, 但是如果findall没匹配成功则返回空列表,这时用列表下标去访问元素时就会报IndexError: list index out of range。

    如:

    >>>re.findall('abc','abd')
    []
    >>>re.findall('abc','abd')[0]
    Traceback (most recent call last):
    File "<input>", line 1, in <module>
    IndexError: list index out of range

    我们可以在pattern后面加一个"|$"来生成一个默认的''元素:

    >>>re.findall('abc|$','abd')[0]
    ''
    >>>re.findall('abc|$','abcdef') #注意,无论匹配到与否,都会附加上一个''元素
    ['abc', '']

    同样适用于re.search

    >>> re.search('d+|$', 'aa33bbb44').group()
    '33'
    >>> re.search('d+|$', 'aazzzbbb').group()
    ''

    如果不加|$的话:

    >>>re.search('d+', 'aazzzbbb').group() #search没匹配上,再用.group()就会报错
    Traceback (most recent call last):
    File "<input>", line 1, in <module>
    AttributeError: 'NoneType' object has no attribute 'group'

    参考:https://stackoverflow.com/questions/38579725/return-string-with-first-match-regex

  • 相关阅读:
    poj1019——log10求位数
    poj2084——卡特兰数
    hdoj1023——卡特兰数
    poj1496——组合数学
    poj1850——组合数学
    bestcoder#29 1002 矩阵连乘快速幂解fib数列
    bestcoder#28 1002 dfs
    poj1458——dp,lcs
    hduoj1106
    codeforces#296div2_b 字符串,图
  • 原文地址:https://www.cnblogs.com/huahuayu/p/8253882.html
Copyright © 2011-2022 走看看