gpt4 book ai didi

regex - 简单的正则表达式在 Perl 中不起作用

转载 作者:行者123 更新时间:2023-12-01 02:21:14 25 4
gpt4 key购买 nike

我有一个简单的 Perl 正则表达式,它应该匹配两个字符之间的空格并将空格替换为 * .在某些情况下它根本不起作用。 Perl 行是这样的:

s/([A-Za-z0-9])\s+([A-Za-z0-9])/\1 * \2/g;

例如见下:( ~> 是我的 zsh 提示)
~> cat mwe
s t Subscript[r, 1]
~> perl -pe "s/([A-Za-z0-9])\s+([A-Za-z0-9])/\1 * \2/g;" < mwe
s * t Subscript[r, 1]
t Subscript[r, 1]不匹配。这只是一个例子。我的文件更长,虽然正则表达式最正确地捕获,但我找不到它不匹配(并且应该)的模式。

Vim 似乎正确地找到了一切(在适当的正则表达式语法更改之后)。

我该如何解决这个问题?我如何帮助诊断问题?

谢谢你。

最佳答案

改用前瞻:

perl -pe 's/([a-z0-9])\s+(?=[a-z0-9])/\1 * /ig' mwe

输出:

s-E^(t * Subscript[r, 1]) t * v-E^(t * Subscript[r, 1]) y-E^(t * Subscript[r, 1]) t * y+E^t * s * Subscript[r, 1]+2 * E^(t * Subscript[r, 1]) s * Subscript[r, 1]-3 * E^(t+t * Subscript[r, 1]) s * Subscript[r, 1]+E^(t * Subscript[r, 1]) s * t * Subscript[r, 1]



问题是在你的正则表达式中你匹配而不是向前看。所以对于以下情况:
perl -pe 's/([a-z0-9])\s+([a-z0-9])/\1 * \2/ig' <<< "a b c"

你会得到:
a * b c

b之前已经匹配并且内部指针已向前移动。

关于regex - 简单的正则表达式在 Perl 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20407527/

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