gpt4 book ai didi

regex - 在字符串中查找文件路径

转载 作者:IT王子 更新时间:2023-10-29 02:34:47 25 4
gpt4 key购买 nike

我修改了 gnome-terminal 并添加了对自定义 url 处理程序的支持:src://
当您 ctrl-click 时,它可以让您直接跳转到文件中的行号。

示例 src:///path/to/file:43

一切都很好,但现在我需要某种类型的过滤器,将所有相对和绝对路径转换为绝对 src 链接。然后我就可以通过它传输另一个程序输出。

例子

$ go build

# command-line-arguments
./test.go:3931: undefined: erre

我想要这样的东西

$ go build | src-links

# command-line-arguments
src:///home/icholy/gocode/src/test/test.go:3931: undefined: erre

我的第一个想法是使用正则表达式,但我发现的唯一示例是已经以方案/协议(protocol)为前缀的路径。

我被卡住了,所以非常感谢您的想法/建议。我将在 go 中实现它,但这并不重要。

最佳答案

非常棒的想法。然而,文件名具有相当通用的格式,因此我怀疑您应该只着眼于涵盖其中的很大一部分,而不是全部。

如果您打算将其用于编程工作,那么您可能会认为仅匹配许多程序员认为良好做法的文件名类型是可以接受的。即路径中的字符集匹配 [A-Za-z0-9/_.-] 。您还希望您要查找的是后跟“:\d+”的文件名,并且行规范与其他看起来可能是行规范一部分的字符不连续。最后一点可以通过前向和后向环视断言来完成。

如果您将其与文件存在性测试(相对于当前目录或指定目录)相结合,那么您将获得一个非常易于管理的范围和一个可靠的测试。

所以你的文件规范正则表达式是这样的:

(?<![A-Za-z0-9/_.-])([A-Za-z0-9_.-]):(\d+)(?![A-Za-z0-9/_.-])

您应该能够将大多数此类文件规范转换为绝对格式,只需将它们附加到所需路径即可,除非它们以 / 开头。

$PATH/$file_path

路径是否以./开头并不重要。上面的方法无论如何都有效,因为 /foo/./bar/baz 是一个可接受的路径。与 /foo/bar/../../bar/baz/xyz'\ 相同。

您应该尝试确保您在此处使用的规范与您的 gnome 终端认为是链接的一部分的规范一致。

关于您如何使用 gnome 终端位的详细信息将很高兴看到。这将使此页面将来对其他人更有用。

关于regex - 在字符串中查找文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16989204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com