Regex 正则表达式if then不带else在ripgrep中
如果满足某些条件,我将尝试在一系列python脚本中匹配一些方法。我要看的第一件事是文件中是否存在Regex 正则表达式if then不带else在ripgrep中,regex,ripgrep,Regex,Ripgrep,如果满足某些条件,我将尝试在一系列python脚本中匹配一些方法。我要看的第一件事是文件中是否存在import re,如果存在,则查找re.sub(something)的所有情况。我试着遵循关于如何在没有else正则表达式的情况下使用if-then的文档,但似乎无法在有或没有pcre2的情况下使用ripgrep 我的下一种方法是使用组,因此rg-n“(^import.+re)|(re\.sub.+)”-r'$2',但这种方法的问题是,由于第一个导入组匹配,我在输出中得到了很多空文件。正在正确处理
import re
,如果存在,则查找re.sub(something)
的所有情况。我试着遵循关于如何在没有else正则表达式的情况下使用if-then的文档,但似乎无法在有或没有pcre2的情况下使用ripgrep
我的下一种方法是使用组,因此rg-n“(^import.+re)|(re\.sub.+)”-r'$2'
,但这种方法的问题是,由于第一个导入组匹配,我在输出中得到了很多空文件。正在正确处理$2
我希望避免做一个或组捕获,如果可能的话使用正则表达式选项
总之,我希望的是,如果import re
出现在文件中的任何位置,则搜索re\.sub.+
,并使用ripgrep
仅输出匹配的文件和行。使用ripgrep是一个硬依赖项
一些示例代码:
import re
for i in range(10):
re.match(something)
print(i)
re.sub(something)
使用shell管道和xargs可以很容易地实现这一点。其思想是使用第一个正则表达式作为要搜索文件的过滤器,第二个正则表达式显示
re.sub
发生的位置
下面是三个要测试的Python文件
import-without-sub.py
具有import-re
但没有re.sub
:
重新导入
对于范围(10)内的i:
重新匹配(某物)
印刷品(一)
import-with-sub.py
具有import-re
和re.sub
:
重新导入
对于范围(10)内的i:
重新匹配(某物)
印刷品(一)
关于sub(某物)
最后,no import.py
没有import re
,但有re.sub
:
范围(10)内的i的:
重新匹配(某物)
印刷品(一)
关于sub(某物)
现在,这里的命令只显示包含import re
的文件中re.sub
的匹配项:
rg'^import\s+re$'--具有匹配项的文件--null | xargs-0 rg-F're.sub('
--具有匹配项的文件
和--null
打印出所有由num
字节分隔的匹配文件路径。xargs-0
然后读取这些文件路径并将其转换为参数,以提供给rg-F're.sub('
)。(我们使用--null
和-0
来正确处理包含空格的文件名。)
其在包含上述三个文件的目录中的输出为:
import-with-sub.py
7:re.sub(something)