首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ripgrep中的正则表达式if then不带其他

ripgrep中的正则表达式if then不带其他
EN

Stack Overflow用户
提问于 2019-05-09 06:18:36
回答 1查看 215关注 0票数 1

如果满足某些条件,我会尝试在一堆python脚本中匹配一些方法。我首先要检查的是文件中是否存在import re,如果存在,则查找re.sub(something)的所有情况。我尝试遵循文档here,了解如何使用if then而不使用else正则表达式,但似乎无法在有或没有pcre2的情况下与ripgrep一起工作。

我的下一个方法是使用组,所以使用rg -n "(^import.+re)|(re\.sub.+)" -r '$2',但是这种方法的问题是,因为第一个导入组匹配,所以我在输出中得到了许多空文件。$2处理正常。

我希望避免执行或组捕获,如果可能,使用regex if选项。

总而言之,我希望的是,如果import re出现在文件中的任何位置,那么搜索re\.sub.+,并使用ripgrep仅输出匹配的文件和行。使用ripgrep是一种硬依赖。

一些示例代码:

代码语言:javascript
复制
import re

for i in range(10):
    re.match(something)
    print(i)

re.sub(something)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-10 19:23:11

这可以通过shell管道和xargs非常容易地完成。其思想是使用第一个正则表达式作为筛选器,查找要搜索的文件,使用第二个正则表达式显示发生re.sub的位置。

下面是三个要测试的Python文件。

import-without-sub.pyimport re,但没有re.sub

代码语言:javascript
复制
import re

for i in range(10):
    re.match(something)
    print(i)

import-with-sub.py同时具有import rere.sub

代码语言:javascript
复制
import re

for i in range(10):
    re.match(something)
    print(i)

re.sub(something)

最后,no-import.py没有import re,但有一个re.sub

代码语言:javascript
复制
for i in range(10):
    re.match(something)
    print(i)

re.sub(something)

现在,下面的命令仅显示包含import re的文件中的re.sub匹配

代码语言:javascript
复制
rg '^import\s+re$' --files-with-matches --null | xargs -0 rg -F 're.sub('

--files-with-matches--null打印出由NUL字节分隔的所有匹配的文件路径。然后,xargs -0读取这些文件路径,并将它们转换为要提供给rg -F 're.sub('的参数。(我们使用--null-0是为了正确处理包含空格的文件名。)

它在包含上述所有三个文件的目录中的输出为:

代码语言:javascript
复制
import-with-sub.py
7:re.sub(something)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56049758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档