gpt4 book ai didi

正则表达式替换函数 : in cases of no match, $1 返回整行而不是空

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

测试链接:regexr.com/42d9c

这让我发疯了。

我想在下面的行中提取条形码:

Ceres Juice Apricot 12 x 1lt unit: 6001240102022
Ceres Juice Cranberry& Kiwi Juice 12 x 1lt... unit:
Ceres Juice Guava 12 x 1lt.. unit:6001240222829
Ceres Juice Orange 12x1lt... unit:
Ceres Juice Medley of Fruits 1L x 12 unit: 6001240100660

它应该返回:
6001240102022

6001240222829

6001240100660

我正确使用 .*(\d{13}).*
然后我使用 $1让它返回第一场比赛

但我的结果是这样的:
6001240102022
Ceres Juice Cranberry& Kiwi Juice 12 x 1lt... unit:
6001240222829
Ceres Juice Orange 12x1lt... unit:
6001240100660

原因:

此问题的原因是,如果匹配组 ($1) 中没有任何内容,则 'Replace' 将返回原始字符串。

解决方法:

确保每一行都有一个“匹配”,并将其放入匹配组 1 ($1)。然后将您的实际比赛放入比赛组 2($2)。这该怎么做?

语言/平台:

任何。我已经尝试了所有在线 Regex 网站以及 Notepad++

最佳答案

您可以添加匹配任何字符串的替代项,

.*(\d{13}).*|.*

关键是先尝试第一个备选方案,如果一行中有 13 个连续数字,备选方案将“获胜”和 .*不会触发。 $1然后将保留 13 位数字。见 regex demo .

或者,具有强制性数字捕获组的可选非捕获组:
(?:.*(\d{13}))?.*

regex demo

在这里, (?:.*(\d{13}))?将至少执行一次(因为 ? 是匹配 1 次或 0 次的贪婪量词)并将找到 13 个数字并将它们放入除换行符以外的任何 0+ 个字符之后的第 1 组。 .*在模式的末尾将匹配该行的其余部分。

关于正则表达式替换函数 : in cases of no match, $1 返回整行而不是空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53119343/

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