在Python中,正则表达式模式是否应始终以^开头并以$结尾?

时间:2019-06-02 01:08:34

标签: python regex python-regex

我注意到大多数正则表达式模式以^开头,以$结束。但是,如果未提供这些标识符,则该模式在大多数情况下仍会像预期的那样工作。所以我的问题是,这是否是确保始终如此的好习惯?

我问的原因是我正在使用Django构建正则表达式测试器网站,用户可以在其中存储其正则表达式对象,然后对其进行测试。如果始终是一个好主意,我将编写一个接受用户输入模式的函数,并确保该函数以^开头并以$结束。像这样:

public void createAPKList() throws ZipException, IOException {
    apkFileList =  new File("C:/eclipse/workspace/Appium-Side-Project/APKDir/APKFiles").listFiles();
    System.out.println(apkFileList[apkFileList.length-1].getPath());
    apkInstallOptions = storeAndSortFiles(apkFileList, apkInstallOptions);
}


private HashMap<String, File> storeAndSortFiles(File[] fileList, HashMap<String, File> storageList) throws ZipException, IOException{
    ZipFile apkDetails;
    //Example of calling specific ABI 
    String aBI = "armeabi-v7a/";
    String patternStr = "^lib/"+aBI+"[(.*)].so$";
    for(File apk : fileList) {

        //how to initialize ZipEntry to assign the any file that ends with ".so" ?
        apkDetails = new ZipFile(apk);
        ZipEntry readFolders = apkDetails.getEntry(patternStr);
        System.out.println(readFolders.getName().startsWith("lib/armeabi-v7a/"));

    }
    return storageList;
}

任何解释都值得赞赏。

2 个答案:

答案 0 :(得分:3)

不,开始和结束锚可能不是一个好习惯。有时可能需要它们,有时可能是不必要的,有时只是为了确保具有更多安全表达式的附加约束而已,尤其是在表达式出于验证目的的情况下。

如果我们希望捕获或搜索字符串中的内容,通常不使用它们。

对于您的目标,这似乎是必要的。

答案 1 :(得分:1)

这些被称为anchors,在您需要查询从头到尾匹配整个字符串时非常有用。没有它们,您将在字符串中搜索查询的任何实例。

例如。

^cats$

将匹配cats而不匹配ilovecatscatsaregood,因为锚点要求在cats之前或之后不存在字符。但是

cats

将匹配catsilovecatscatsaregood,因为所有这些字符串中都包含cats

附件中的链接深入介绍了此概念。我希望这会有所帮助!

PS:如果要快速测试正则表达式字符串,Regex tester websites会很有帮助。