gpt4 book ai didi

正则表达式 - 通配符后的可选捕获组

转载 作者:行者123 更新时间:2023-12-02 03:09:56 25 4
gpt4 key购买 nike

假设我有以下列表:

No 1 And Your Bird Can Sing (4)
No 2 Baby, You're a Rich Man (5)
No 3 Blue Jay Way S
No 4 Everybody's Got Something to Hide Except Me and My Monkey (1)

我想提取括号中的数字、标题和周数(如果存在)。

有效,但最后一组不是可选的( regstorm ):

No (?<no>\d{1,3}) (?<title>.*?) \((?<weeks>\d)\)

最后一组可选,仅匹配数字( regstorm ):

No (?<no>\d{1,3}) (?<title>.*?)( \((?<weeks>\d)\))?

将具有周捕获的模式与不具有周捕获的模式相结合是可行的,但必须有更好的方法:

(No (?<no>\d{1,3}) (?<title>.*) \((?<weeks>\d)\))|(No (?<no>\d{1,3}) (?<title>.*))

我使用 C# 和 javascript,但我想这是一个一般的正则表达式问题。

最佳答案

你的正则表达式即将完成!

首先也是最重要的是,您应该添加 $在最后。这使得(?<title>.*?)一直匹配到字符串的末尾。目前,(?<title>.*?)匹配一个空字符串然后停止,因为它意识到它已经到达了正则表达式的其余部分匹配的点。为什么正则表达式的其余部分匹配?因为可选组可以匹配任何空字符串。通过输入 $ ,您正在使正则表达式的其余部分“更难”匹配。

其次,您忘记匹配左括号 \( .

你的正则表达式应该是这样的:

No (?<no>\d{1,3}) (?<title>.*?)( \((?<weeks>\d)\))?$

Demo

关于正则表达式 - 通配符后的可选捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57936320/

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