作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有以下列表:
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)\))?$
关于正则表达式 - 通配符后的可选捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57936320/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!