我有一个正则表达式,我试图匹配以下类型的数据,每个标记由未知数量的空格分隔。
更新:“文本”几乎可以是任何字符,这就是我.*
最初的原因。重要的是,它还可以包含空格。
- 文本
- 文字 01
- 文本 01 的 03
- 文本 01(共 03 个)
- 正文 01-03
我想将“文本”、“01”和“03”作为单独的组捕获,除“文本”之外的所有内容都是可选的。到目前为止,我能做的最好的是:
\s*(.*)\s+(\d+)\s*(?:\s*\(?\s*(?:of|-)\s*(\d+)\s*\)?\s*)
这匹配#3-#5,并将它们放入正确的捕获组中。但是,我不明白为什么当我?
在末尾添加一个附加项以使表达式的一部分位于01
可选之后,我的捕获组变得很时髦。
\s*(.*)\s+(\d+)\s*(?:\s*\(?\s*(?:of|-)\s*(\d+)\s*\)?\s*)?
上面的 RegEx 匹配 #2-#5,但捕获组仅对 #2 和 #5 是正确的。
这似乎是一个简单的正则表达式,所以我不知道为什么我会遇到这么多麻烦。
这是我用来帮助我调试的在线 RegEx 评估器的链接:http ://regexr.com?2tb64 。该链接已经有第一个 RegEx 和填充的测试数据。