使用正则匹配形如xyxy的字符串

使用正则匹配形如xyxy的字符串

前言

今天日常刷题,遇到网易的一道笔试题。看到了大神的思路,正则用的飞起,真是佩服。在此记录一下。

问题

给一个字符串,检查字符串是否存在形如xyxy的子序列。存在返回True,不存在返回False

有两点需要解释下:
1. x可以和y相同
2. 由于找的是子序列,所以只要保证四个字符的相对次序正确即视为存在。例如:AABCADB中存在子序列ABAB

核心思路

使用正则表达式r'.*(.).*(.).*(\1).*(\2).*'进行匹配即可,能匹配到就返回True,不能匹配到就返回False
这里主要用到正则表达式的一个小知识点,就是匹配之前匹配到的分组
\1, \2, \3依次匹配之前匹配到的第一个,第二个,第三个分组的内容,后面按照需要你还可以匹配第四个,第五个等等分组。

具体解法

假设s为需要检查的字符串,则代码如下:

import re


def func(s):
    """检查字符串s中是否包含xyxy形式的子序列"""
    if not s or len(s) < 4:
        return False
    m = re.match(r'.*(.).*(.).*(\1).*(\2).*', s)
    return m is not None

图省事的各位大佬直接调用func即可

测试

测试代码如下:

def test_0():
    src = 'ABAB'
    expect = True
    assert func(src) is expect


def test_1():
    src = 'NABCBFAHB'
    expect = True
    assert func(src) is expect


def test_2():
    src = 'AB'
    expect = False
    assert func(src) is expect


def test_3():
    src = 'ABCDE'
    expect = False
    assert func(src) is expect

直接调用各个函数,或者使用pytest批量调用就可以


pytest执行结果如下:
pytest执行结果

总结

果然字符串处理,正则才是王道。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值