我需要做一个问题,但有一些注意事项会让它变得困难。
问题:匹配包含最多一个a
的字母{abc}上的所有非空字符串。
实施例
一个
ABC
丰原
bbcabb
非实例
AA
BBAA
警告:你不能使用前瞻/后视。
我拥有的是:
^[bc]*a?[bc]*$
但它匹配空字符串。也许一个暗示? Idk什么都有帮助
(如果重要的话,我正在使用python)。
答案 0 :(得分:1)
据我了解你的问题,唯一的问题是,你当前的模式与空字符串匹配。为防止这种情况发生,您可以使用word boundary \b
至少需要一个单词字符。
^\b[bc]*a?[bc]*$
另一个选项是alternate中的group。从开始到结束匹配任意数量的a
或一个或多个[bc]
所包围的[bc]
,如下所示:^(?:[bc]*a[bc]*|[bc]+)$
答案 1 :(得分:0)
我理解这个问题的方式是字母表中的任何字符都应匹配,只有一个 a 字符。
匹配所有非空字符串字母 ...最多一个
^[b-z]*a?[b-z]*$
如果可以包含空格:
^([b-z]*\s?)*a?([b-z]*\s?)*$
答案 2 :(得分:0)
你甚至不需要正则表达式,你也可以使用.count()
和列表理解:
data = """a,abc,bbca,bbcabb,aa,bbaa,something without the bespoken letter,ooo"""
def filter(string, char):
return [word
for word in string.split(",")
for c in [word.count(char)]
if c in [0,1]]
print(filter(data, 'a'))
屈服
['a', 'abc', 'bbca', 'bbcabb', 'something without the bespoken letter', 'ooo']
答案 3 :(得分:0)
你必须积极匹配排除空字符串的东西,
仅使用a,b或c字母。但不能使用断言。
这是你做的。
正则表达式^(?:[bc]*a[bc]*|[bc]+)$
解释
^ # BOS
(?: # Cluster choice
[bc]* a [bc]* # only 1 [a] allowed, arbitrary [bc]'s
| # or,
[bc]+ # no [a]'s only [bc]'s ( so must be some )
) # End cluster
$ # EOS