Python 每2个字符后检查分隔符
是否有方法检查字符串中每2个字符后是否有分隔符 例如:Python 每2个字符后检查分隔符,python,Python,是否有方法检查字符串中每2个字符后是否有分隔符 例如: x = '32-21-44-33': # if there is '-' after every 2 digits, return True # so if x = '231-21-21-21' it would return as False 我将使用regex模式表达您的需求: ^\d{2}(?:-\d{2})*$ 示例脚本: inp='32-21-44-33' 如果重新搜索(r'^\d{2}(?:-\d{2})*$,inp)
x = '32-21-44-33':
# if there is '-' after every 2 digits, return True
# so if x = '231-21-21-21' it would return as False
我将使用regex模式表达您的需求:
^\d{2}(?:-\d{2})*$
示例脚本:
inp='32-21-44-33'
如果重新搜索(r'^\d{2}(?:-\d{2})*$,inp):
打印(“匹配”)#打印匹配
每三个字符检查一次,看它是否等于破折号。如果不是,则立即返回false。如果到达字符串的末尾,则返回true
x = 2
while x < len(mystring):
if mystring[x] != '-':
return False
x += 3
return True
x=2
当x
一种方法是对字符串进行切片并使用all()
进行检查
如果您只想检查-
是否位于字符串中的每3个位置,则只需执行以下操作:
>>> my_str = '32-21-44-33'
>>> all(x=='-' for x in my_str[2::3])
True
如果您希望确保“-”仅出现在第三个位置,而不出现在任何其他位置,则可以使用as:
但是,如果希望确保字符串严格遵循两个数字后跟“-”的模式,则可以通过对切片字符串另外使用zip()
来实现这一点,如下所示:
>>> all(z=='-' and (x + y).isdigit() for x, y, z in zip(my_str[::3], my_str[1::3], my_str[2::3]))
True
最好最简单的方法是
z = x.split("-")
for j in z:
if len(j)!=2 :
print("false")
您可以使用split()
和-
作为分隔符来分隔单词,然后使用all()
确保所有单词都具有所需的长度或其他属性:
>>> x = '32-21-44-33'
>>> all(len(s) == 2 for s in x.split('-'))
True
>>> x = '231-21-21-21'
>>> all(len(s) == 2 for s in x.split('-'))
False
如果要确保它们也都是数字:
>>> x = '32-21-44-33'
>>> all(len(s) == 2 and s.isdigit() for s in x.split('-'))
True
>>> x = '32-ab-44-33'
>>> all(len(s) == 2 and s.isdigit() for s in x.split('-'))
False
这里有一个返回bolean+未知分隔符的单行线
def check_every_n(x,n):
return (len(list(set([x[i] for i in range(n,len(x)-n) if (i+1) % (n+1) == 0]))) == 1), x[n]
x = '32-21-44-33'
n = 2
print (check_every_n(x,n))
取字符串x
,测试n
,使用列表理解构建字符串中每个n
元素的列表,如果len()=1
表示每个n
元素相同,则删除重复项,因此,返回bolean检查+位置n
索引n-1
处的分隔符
输出:
(True, '-') # n = 2
(False, '2') # n = 3
2 (False, '0')
3 (True, '3')
4 (True, '-')
5 (False, '0')
毫无意义的说,如果布尔值为False,则分隔符没有意义
有了它,您可以每n检查一次任何类型的分隔符。所以你不必提了。此外,如果愿意,还可以循环查找任意n处的任何分隔符
例如,返回bolean和分隔符(如果有),间距为2到len(x)//3(以允许重复):
输出:
(True, '-') # n = 2
(False, '2') # n = 3
2 (False, '0')
3 (True, '3')
4 (True, '-')
5 (False, '0')
如果您不知道分隔符,有一种简单的“可理解”方法
x = '32-21-45-33'
# split list with the third char of the string, then sort the list by element length
sorted_list = sorted(x.split(x[2]), key=len)
# if your first element length is equal to your last element length all element are the same length
if len(sorted_list[0]) == len(sorted_list[len(sorted_list) - 1]):
print("ok")
else
print("nok")
这不是一个好答案。它充满了语法错误,这不起作用。他们可以管理语法。我是stackoverflow新手,所以我不知道如何正确缩进代码。不,这不仅仅是缩进。这个答案是错误的。我认为现在可以了。当你写答案时,你应该检查所有的情况。对于无效的字符串,如'32-21-44-33--'
,'32-21-44-33-1'
,'32-21-44----33'
等,这会返回true。@mhawke感谢你指出它,我现在已经更正了,如果x='32-21-44-33-'
,输出应该是什么?