我正在编写一个脚本来解析文本文件(确切地说是csv),我想根据每个行内容从文件中选择行。有许多字符串条件需要检查,所以我推测regexp是要走的路,但是我还需要检查一行中的数字与模数算术中的条件,到目前为止它是n%4==k
和{ {1}}。然而,似乎只有临时解决方案。 n%2==k
非常简单,但要检查n%2==k
我必须设计这样的内容:
n%4==2
我的问题是:
r'((^\d*[24680]|^)[26]|^\d*[13579][048])[\s;,].*' # more (unrelated) conditions follow
或n%3==k
),是否有可行的方法使用regexp,或者我最好从字符串中提取一个数字并编写额外的代码来检查这些条件。答案 0 :(得分:0)
对于n%4==2
(参考:http://en.wikipedia.org/wiki/Divisibility_rule)
r = r'^[26]$|^\d*[02468][26]$|^\d*[13579][048]$'
# test
for i in xrange(1, 1000):
m = re.match(r, str(i))
if i % 4 == 2:
assert m, [i, i % 4]
else:
assert not m, i
对于n%3==0
,请参阅Regex filter numbers divisible by 3。
我不知道mod n
的任何通用解决方案,无论如何它将是一个有趣但纯粹的理论练习。在现实生活中,只需使用整数。