gpt4 book ai didi

regex - 如何使正则表达式匹配的一部分成为可选?

转载 作者:行者123 更新时间:2023-12-04 11:03:52 25 4
gpt4 key购买 nike

这是一个示例字符串:

123456#p654321

目前,我正在使用此匹配将 123456654321 捕获到两个不同的组中:
([0-9].*)#p([0-9].*)

但有时,字符串的 #p654321 部分将不存在,因此我只想捕获第一组。我试图通过将 ? 附加到第二组来使第二组“可选”,这可行,但前提是剩余字符串的末尾有 #p

解决这个问题的最佳方法是什么?

最佳答案

您有 #p在捕获组之外,这使其成为结果的必需部分。您还错误地使用了点字符 ( . )。点(在大多数 reg-ex 变体中)将匹配任何字符。将其更改为:

([0-9]*)(?:#p([0-9]*))?
(?:)语法是您获得非捕获组的方式。然后我们只捕获您感兴趣的数字。最后,我们将整个内容设为可选。

此外,大多数 reg-ex 变体都有 \d数字的字符类。所以你可以进一步简化:
(\d*)(?:#p(\d*))?

正如另一个人所指出的, *运算符可能匹配零位数字。为了防止这种情况,请使用 +运算符:
(\d+)(?:#p(\d+))?

关于regex - 如何使正则表达式匹配的一部分成为可选?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12451731/

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