使用正则匹配形如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执行结果如下:

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

本文介绍了一种使用正则表达式检查字符串中是否存在特定子序列的方法。通过匹配形如xyxy的模式,文章提供了一个简洁的Python函数实现,并通过多个测试案例验证了其正确性。
387

被折叠的 条评论
为什么被折叠?



