Python 2.7 我想搜索一个具有'01'或'10'模式的单词,无论单词的长度如何。 如果模式是其他任何东西,那么它不是我想要的模式: 例如:
10 - Yes
01 - Yes
001 - No
10101010 – Yes
1001000 – No
11010111 – No
1010110101011 -No
我正在看正则表达式。但是我只看到给定的固定长度模式的匹配。我希望匹配单词长度未知的整个单词。
答案 0 :(得分:2)
此代码将查找偶数位置中没有任何字符出现在奇数位置的字符串。对于0
和1
(或任何两个字符)的2个字符的字母表,这将捕获长度至少为2且交替的字符串。
def is_alternating(string):
if len(string) < 2:
return False
evens = string[::2]
odds = string[1::2]
# if the sets aren't disjoint, then at least one character appears at
# both even and odd positions -> not an alternating string
if set.isdisjoint(set(evens), set(odds)):
return True
else:
return False
words = ['10', '01', '001', '10101010', '1001000', '11010111', '1010110101011']
results = list(map(is_alternating, words))
for thing in zip(results, words):
print(thing)
结果:
(True, '10')
(True, '01')
(False, '001')
(True, '10101010')
(False, '1001000')
(False, '11010111')
(False, '1010110101011')
以下解决方案对应的规格与OP似乎不同。
>>> import re
>>> words = ['10', '01', '001', '10101010', '1001000', '11010111', '1010110101011']
>>> results = [bool(re.match('^((01)+|(10)+)$', w)) for w in words]
>>> for e in zip(results, words):
print(e)
(True, '10')
(True, '01')
(False, '001')
(True, '10101010')
(False, '1001000')
(False, '11010111')
(False, '1010110101011')
我认为这会复制您想要的行为。严格地由一个或多个01
或10
重复组成的字符串(但不是这两个的混合)匹配。