Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式if then不带else在ripgrep中_Regex_Ripgrep - Fatal编程技术网

Regex 正则表达式if then不带else在ripgrep中

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',但这种方法的问题是,由于第一个导入组匹配,我在输出中得到了很多空文件。正在正确处理

如果满足某些条件,我将尝试在一系列python脚本中匹配一些方法。我要看的第一件事是文件中是否存在
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)