您好我有一个列表[tag1 tag2]
,我想知道以下标记后面的数字是否为增量。
match_atr_value = re.search('(.+)\~(\w+)',each_line)
tags = match_atr_value.group(1).split('.')
print tag
Input:
[tag1 tag2]
[tag1 tag3]
[tag1 tag2 tag4]
Output:
Incremental
Not
Not
“连续整数是按顺序排列的整数”
有更简单的方法吗?我所要做的就是检查它是否为增量,如果是,我应该使用它们,否则我应该抛出异常。 谢谢
答案 0 :(得分:4)
您可以通过re.findall()
提取所有数字后跟tag
,然后使用enumerate()
和all()
检查数字是否连续:
import re
l = [
"[tag1 tag2]",
"[tag1 tag3]",
"[tag1 tag2 tag4]"
]
pattern = re.compile(r"tag(\d+)")
for item in l:
numbers = map(int, pattern.findall(item)) # if Python 3: call list() on that
result = all(index == item for index, item in enumerate(numbers, start=numbers[0]))
print(result)
打印:
True
False
False
答案 1 :(得分:0)
如果我是你,我会避免使用正则表达式并执行下面的操作。我从字符串中获取数字,无论是开始,结束等,然后将其与之前的值进行比较,如果不增加,则将其与return False
进行比较
def isIncreasing( listy ):
prev = 0
for w in listy:
val = [''.join(s) for s in w if s.isdigit()]
cur = int(val[0])
if cur != prev+1:
return False
prev = cur
return True
答案 2 :(得分:0)
tag1val = int(re.search(r'\D*(\d+)', tag1).group(1))
tag2val = int(re.search(r'\D*(\d+)', tag2).group(1))
(tag1val - tag2val) == -1
True
tag3val = int(re.search(r'\D*(\d+)', tag3).group(1))
(tag1val - tag3val) == -1
False
(tag2val - tag3val) == -1
True
如果你想坚持正则表达式,你可以走这条路。如果差值为-1,那么右边的那个比左边的那个大1。