使用regexp检查模数算术条件

时间:2012-09-13 08:08:25

标签: python regex

我正在编写一个脚本来解析文本文件(确切地说是csv),我想根据每个行内容从文件中选择行。有许多字符串条件需要检查,所以我推测regexp是要走的路,但是我还需要检查一行中的数字与模数算术中的条件,到目前为止它是n%4==k和{ {1}}。然而,似乎只有临时解决方案。 n%2==k非常简单,但要检查n%2==k我必须设计这样的内容:

n%4==2

我的问题是:

  1. 有没有办法简化上面的正则表达式?这有什么明显的问题吗?
  2. 如果我想将脚本概括为其他模数条件(例如r'((^\d*[24680]|^)[26]|^\d*[13579][048])[\s;,].*' # more (unrelated) conditions follow n%3==k),是否有可行的方法使用regexp,或者我最好从字符串中提取一个数字并编写额外的代码来检查这些条件。

1 个答案:

答案 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的任何通用解决方案,无论如何它将是一个有趣但纯粹的理论练习。在现实生活中,只需使用整数。