gpt4 book ai didi

c# - Regex.Replace 在勉强匹配时有奇怪的行为

转载 作者:行者123 更新时间:2023-12-01 17:32:58 25 4
gpt4 key购买 nike

回复this问题我坚持这种情况。在我的正则表达式中使用不情愿的匹配会带来这个结果

string s = Regex.Replace(".A.", "\\w*?", "B");

B.BAB.B

为什么它不匹配并替换A?

最佳答案

因为 \\w*? 匹配尽可能少的 \w包括 0 个

由于您使用的是 \w* 而不是 \w+,因此正则表达式会匹配 0 个或多个 \w

由于 \w* 上有一个额外的 ?,因此该正则表达式的最小可能匹配是 0 长度的字符串 ''。

由于 ? 强制正则表达式匹配尽可能小的匹配项,因此它永远只匹配 0 长度的字符串。它无法匹配单个字符 A,因为这将比最短的匹配更长。

因此 .A. 中的所有 0 长度字符串(即:''.''A''.'',其中每个可能的 0 长度字符串是标记为 '') 被替换为“B”,即“B.A.B”。

如果您想禁用此行为并替换至少一个 \w,可以使用正则表达式 \w+?。然而,根据与之前相同的推理, ? 强制它仅替换长度为 1 的 \w,因此您也可以使用正则表达式 \w.

关于c# - Regex.Replace 在勉强匹配时有奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9228448/

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