我正在尝试检查具有长度为 3 的子字符串的表达式是否只包含一个c
字符。也就是说,字符串中每个长度为 3 的子字符串都必须包含一个c
字符。例如:
诸如: 之类的字符串在其长度为 3 的子字符串中"a", "cc", "bbc", "cabcbbca", "acaacbacbb", "abcabcabc"
都恰好有一个c
。如果任何子字符串的长度小于 2,那么它们无论如何都是有效的。
但是,诸如: 之类的字符串"caaa", "bbcaacbcaac"
不符合此要求,因为它们包含长度为 3 且不完全包含一个c
字符的子字符串。
到目前为止,我已经制作了一个快速的 python 程序来检查这个:
# Testing expressions
expressions = ["a", "cc", "bbc", "cabcbbca", "acaacbacbb", "abcabcabc",
"caaa", "bbcaacbcaac"]
# Getting substrings of a certain length
def get_substrings(string, sublen):
substrs = []
for i in range(len(string)):
if len(string[i:i+sublen]) == sublen:
substrs.append(string[i:i+sublen])
return substrs
# extracting valid expressions
def get_valid_expression(expressions, minlen, char_to_check):
valid = []
for string in expressions:
# if string is less than min length, then it is already valid
if len(string) < minlen:
valid.append(string)
else:
# get the subtrings
lst = get_substrings(string, minlen)
# Check if the substring contains exactly one of the characters
if all(substring.count(char_to_check) == 1 for substring in lst):
valid.append(string)
return valid
print("Valid expressions with all substrings of length 3 containing exactly one c:")
print(get_valid_expression(expressions, 3, "c"))
它['a', 'cc', 'bbc', 'cabcbbca', 'acaacbacbb', 'abcabcabc']
从原始列表中返回有效的表达式。
他们是正则表达式的一种方式我可以做到这一点吗?我相信生成一个正则表达式来搜索会更好,并且不需要太多代码。
这应该有效:
^.{0,2}$|^[^c]{0,2}(c[^c]{2})*c[^c]{0,2}$
要仅测试 a、b、c,请使用:
^[abc]{0,2}$|^[ab]{0,2}(c[ab]{2})*c[ab]{0,2}$
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句