繁体   English   中英

Pip 正则表达式搜索

[英]Pip regular expression search

我需要在PyPI上找到与特定正则表达式匹配的所有包:

^django-.*?admin.*$

基本上,package 名称应该以django-开头,后面有admin字样。 例如,以下包应匹配:

django-redis-admin
django-admin-ckeditor 
django-admintools-bootstrap

我可以做pip search django- ,但是有大量我不感兴趣的包。

pip是否提供了一种通过正则表达式查找包的方法? 或者,我应该只是grep django-掉不相关的包?

此外,可能pip search django-pip search admin的“交叉点”也会有所帮助。

我相信这是您正在寻找的单线:

pip search django | grep -P "^django-(?=[-\w]*?admin)[-\w]+"

您可以通过 pipe 和 output 对sort列表进行排序。

pip search django | grep -P "^django-(?=[-\w]*?admin)[-\w]+" | sort

您也可以使用egrep (另请参阅egrep 和 grep之间的差异了解两者之间的差异)。

pip search django | egrep "^django-[^ ]*?admin.*$" | sort

说明

pipe后| which redirects the output of the pip command to <stdin> for the grep command, we enter grep in Perl mode -P . 这是必要的,否则我们将不允许使用前瞻。

我们用^将模式锚定在字符串的开头,并立即将django-匹配为文字。 然后我们断言(前瞻)在这个 position 中,我们将能够匹配任意数量的破折号或单词字符(包括数字和下划线),然后是文字字符串admin

做出这个断言(这是一种验证形式)后,我们现在可以匹配尽可能多的破折号和单词字符,这应该将我们带到模块名称的末尾。

有几种表达方式,对于这种简单的模式,变化主要取决于偏好或情绪。

如果您想更改它以匹配包含django-someword ,只需将admin替换为someword

output

    django-smoke-admin        - django-smoke-admin tests that all admin pages for all registered models responds correctly (HTTP 200).
    django-adminskin          - UNKNOWN
    django-admin-exporter     - Simple admin actions to download/export selected items in CSV, JSON, XML, etc.
    django-treeadmin-fork-alt-storage - Tree UI for mptt-managed models, extracted from FeinCMS. This is a fork with support for alternative storage engines
    django-relatedadminwidget - Get edit and delete links in your django admin. A utility class to let your model admins inherit from.
    django-admin-langswitch   - Adds easy language switch in admin
    django-authy-admin        - A drop in replacement for django's default admin site that provides two-factor authentication via authy's REST API.
    django-frontendadmin      - A a set of templatetags to allow an easy and unobstrusive way to edit model-data in the frontend of your page.
    django-admin-app-names-singleton - Django admin enhancer
    django-mobileadmin        - The Django admin interface for mobile devices.

(名单还在继续。)

顺便说一句,查看pip 搜索文档,我看不到没有 pipe 的方法。

似乎 PyPI 搜索方法不支持正则表达式。 Pip 使用 xmlrpc 进行方法调用,但我在文档中找不到任何搜索(或任何其他)方法的信息,甚至找不到用于 PyPI XML-RPC 服务器的 methodSignature 或 methodHelp。 您可以创建自己的脚本作为 grep 的替代方案(但这没什么意义)。 快速示例:

from xmlrpclib import ServerProxy
import re

URL = 'https://pypi.python.org/pypi'
TEST_RE = r"^django-.*?admin.*$"
TEST = 'django-'

def main():
    pypi = ServerProxy(URL)
    res = pypi.search({'name': TEST})

    for r in res:
        m = re.match(TEST_RE, r['name'])
        if m:
            print(m.group(0))


if __name__ == '__main__':
    main()

一种方法是上述方法,将 pip 搜索结果通过管道传输到 grep。 如果您想使用一次或很少使用正则表达式搜索,我建议使用它。

但是,如果您经常需要此功能,您应该查看yip ,这是我编写的 package,用于完成正则表达式搜索以及 pip 搜索无法执行的其他有用添加,例如显示额外信息(大小、上传时间、主页或许可证)或着色output 以提高可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM