Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 每2个字符后检查分隔符_Python - Fatal编程技术网

Python 每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)

是否有方法检查字符串中每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):
打印(“匹配”)#打印匹配

每三个字符检查一次,看它是否等于破折号。如果不是,则立即返回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-'
,输出应该是什么?