Python 如何获得正则表达式匹配的整个行?

Python 如何获得正则表达式匹配的整个行?,python,regex,Python,Regex,因此,在《用Python自动化无聊的东西》一书中,有一个家庭作业项目: 编写一个程序,打开文件夹中的所有.txt文件,并搜索与用户提供的正则表达式匹配的任何行。结果应打印到屏幕上 下面是我的代码。我有两个问题: 该程序是否有较短的版本 似乎行regex有问题(我希望一个regex与用户指定的regex出现的整行匹配),因为它没有在lineReg下显示任何结果。我试着去掉正则表达式前后部分的括号 缩短程序的一种方法是使其行为更像典型的命令行程序:将输入作为参数,而不是通过某种类型的对话 另一种方

因此,在《用Python自动化无聊的东西》一书中,有一个家庭作业项目:

编写一个程序,打开文件夹中的所有
.txt
文件,并搜索与用户提供的正则表达式匹配的任何行。结果应打印到屏幕上

下面是我的代码。我有两个问题:

  • 该程序是否有较短的版本
  • 似乎行regex有问题(我希望一个regex与用户指定的regex出现的整行匹配),因为它没有在lineReg下显示任何结果。我试着去掉正则表达式前后部分的括号

  • 缩短程序的一种方法是使其行为更像典型的命令行程序:将输入作为参数,而不是通过某种类型的对话

    另一种方法是使输出不那么健谈。以
    grep
    的工作原理为例

    您还可以利用诸如
    glob()
    之类的功能

    与其将整个文件读入内存,不如逐行迭代文件(这在这样的程序中有很多优点)

    最后,我不清楚为什么要用自己的前导和尾随模式包装用户的正则表达式:让用户完全控制正则表达式(至少,我会这么做)

    以下是这些要点的简短说明:

    import sys, glob, re
    
    dir_path = sys.argv[1]
    rgx = re.compile(sys.argv[2])
    
    for path in glob.glob(dir_path + '/*.txt'):
        with open(path) as fh:
            for line in fh:
                if rgx.search(line):
                    msg = '{}:{}'.format(path, line)
                    print(msg, end = '')
    

    说清楚!!这不是regex来的地方或找到regex的地方,而是与regex匹配。我投票将这个问题作为离题题来结束,因为它属于iew.stackexchange。com@MadPhysicist我不知道这个网站存在,我也不知道这些问题在这里是不可行的。@Gahan你的评论很好。谢谢你指出这一点。@Skullz。那很好。我的投票和信息旨在作为指导,而不是任何形式的判断。虽然你已经在这里得到了一个好的和一个不太好(仅在我看来)的答案,但你将来会在评论网站上得到更好的专门帮助。答案很好,但它只是突出了这个问题在错误网站上的程度。谢谢你的回答。我想用模式包装用户的正则表达式的原因是,我想尝试匹配用户正则表达式匹配的整行代码。
    import sys, glob, re
    
    dir_path = sys.argv[1]
    rgx = re.compile(sys.argv[2])
    
    for path in glob.glob(dir_path + '/*.txt'):
        with open(path) as fh:
            for line in fh:
                if rgx.search(line):
                    msg = '{}:{}'.format(path, line)
                    print(msg, end = '')