作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试解析和标记食谱。成分可以用两种主要方式编写:
1 个成熟的鳄梨
1x Ripe Avocado
- x
是可选的,有时会出现
或:
1 成熟鳄梨 (lrg) 123
1x Ripe Avocado (lrg) 123
- 如果出现缩写,则为项目代码整数
我正在尝试 a) 检测它是否匹配样式 1 或 2 和 b) 标记为以下捕获组。
[1][成熟鳄梨][lrg]?[123]?
我似乎无法始终如一地解析它,因此非常感谢任何帮助!
^(\d+)x? ([a-zA-Z0-9_', -]+)
是我所拥有的,但它没有考虑样式 2 中的可选捕获组。
最佳答案
您可以使用带有可选第二部分的模式作为缩写和项目代码整数。您可以在捕获组中捕获的值,为您提供 2 个组和 2 个可选组。
如果你想匹配空白字符而不是仅匹配空格,你可以使用 \s
代替。
假设这些是单词并且可以使用单词字符 \w
进行匹配,您可以使用:
\b(\d+)x? (\w+(?: \w+)*)(?: \(([^()]+)\) (\d+))?\b
解释
(为清楚起见,空格表示为 [ ]
)
\b
字边界(\d+)x?
捕获第 1 组,匹配 1+ 个数字然后匹配可选的 x
[ ](\w+(?:\w+)*)
匹配一个空格,然后在第 2 组中捕获匹配 1+ 个单词字符并重复 0+ 次空格和 1+ 个单词字符(?:
非捕获组
[ ]\(
匹配空格和 (
([^()]+)
捕获第 3 组,不使用否定字符类匹配 ()
\)
匹配)
)?
关闭非捕获组并使其成为可选的,因此第 3 组和第 4 组是可选的\b
字边界关于javascript - 使用 Regex 解析字符串 - 可选的捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735760/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!