正则表达式,用于从开始和返回后查找值

时间:2014-12-02 21:16:20

标签: python regex

我有多个这样的文件:

11111111111111
11010111101101
11110011110101
10014000010001
13500000101111
11108000010161
10100101111501
10000600116051
11011001000101
110080101158001
10012001010001
11111111111111

我计算了所有这些文件的行数和列数。 现在我试着写一些,以确保所有这些文件以1行的行开头。

我遇到问题的第二个问题是找到所有行的长度都是列数的所有文件。在这里,我们不能用正则表达式选择第10行。

3 个答案:

答案 0 :(得分:1)

如果您只是想知道第一行是否包含全部1,请查看第一行。读取整个文件只会使事情过于复杂化。试图弄清楚要查找多少1而不仅仅是“所有这些”过于复杂的事情。保持简单。

with open(filename) as f:
    line = next(f, 'X').strip()
    if all(c == '1' for c in line):
        # yes

或者,如果你想变得有点聪明:

with open(filename) as f:
    line = next(f, 'X').strip()
    if not line.replace('1', ''):
        # yes

或者,如果你真的想使用正则表达式:

with open(filename) as f:
    line = next(f, 'X').strip()
    if re.match(r'^1+$', line):
        # yes

next(f, 'X')确保空文件不会引发异常,并且测试失败(因为'X'.strip()不是全部1),Jon Clements建议。

答案 1 :(得分:0)

我想这可能是你第一个问题的答案:

^1+\s*\n
  • ^字符串的开头
  • 1+字符1,至少重复一次
  • \s*未定义的空格数(零,一个或多个)
  • \n行尾

答案 2 :(得分:0)

我们如何避免使用正则表达式,一次只读取一行文件?

def fileFormatIsCorrect(filename):
    lines = open(filename).readlines()

    for i in range(0, len(lines)):
        line = lines[i]

        # check for the initial row of ones
        if i == 0 and not (line.strip().replace("1","") == ""):
            return False
        if len(line) != len(lines):
            return False
    return True