【发布时间】:2018-08-21 20:43:10
【问题描述】:
这是一个由两部分组成的问题,但我觉得答案是相关的。
我有这个正则表达式模式:
(\d+)(aa|bb) 我用来捕获这个字符串:1bb2aa3aa4bb5bb6aa7bb8cc9cc
查看演示:example 1
它捕获 aa 和 bb 的随机序列(均以数字开头)的方式正是我想要的,并且就它而言是好的。
所以我们在 regex101 上得到了这个匹配:
Match 1
Full match 0-3 `1bb`
Group 1. 0-1 `1`
Group 2. 1-3 `bb`
Match 2
Full match 3-6 `2aa`
Group 1. 3-4 `2`
Group 2. 4-6 `aa`
Match 3
Full match 6-9 `3aa`
Group 1. 6-7 `3`
Group 2. 7-9 `aa`
Match 4
Full match 9-12 `4bb`
Group 1. 9-10 `4`
Group 2. 10-12 `bb`
Match 5
Full match 12-15 `5bb`
Group 1. 12-13 `5`
Group 2. 13-15 `bb`
Match 6
Full match 15-18 `6aa`
Group 1. 15-16 `6`
Group 2. 16-18 `aa`
Match 7
Full match 18-21 `7bb`
Group 1. 18-19 `7`
Group 2. 19-21 `bb`
正如预期的那样,末尾的8cc9ccbit 被忽略。我也想捕捉到这一点,就像我捕捉到第一个重复组一样,用同样的表达方式。所以在最终输出中,我会在输出的末尾添加类似这样的内容。这应该适用于任何一方的任何数量的比赛。本文只是一个例子。
Full match 21-24 `8cc`
Group 1. 21-22 `8`
Group 2. 22-24 `cc`
Match 7
Full match 24-27 `9cc`
Group 1. 24-25 `9`
Group 2. 25-27 `cc`
另外,我想做类似的事情,但将“或”组翻转到最后,即:
1cc2cc3cc4cc5cc6cc7ccb8aa9bb
我当前的正则表达式模式(\\d+)(cc) 只匹配重复的“cc”组。
见演示:example 2
我想要一个类似的完整捕获,每个组的允许条目数量不限。
有什么想法吗?
【问题讨论】:
-
那么,试过
(\d+)(aa|bb|cc)? -
是的,这在技术上确实捕获了它,但我不希望所有三个字符串的随机“或”。我想要一系列 aa bb 组合然后是一个 cc 组(或只是一个 cc)。而且,大概使用不同的正则表达式模式,一系列 cc,然后是一些 aa bb 组合。这有意义吗?
-
对不起,我不明白你的意思。另外,请将正则表达式 falvor 标签添加到问题中。
-
只是不要说“我需要让它在 regex101.com 上工作,然后我会在 C# 应用程序中使用它”。有些人编写 PCRE,然后尝试在 Python
re中使用正则表达式。真的,这很可悲。 -
您可以使用this 查找任意数量的 xaa 或 xbb 匹配,然后是任意数量的 xcc 匹配。如您所见,如果不满足此模式,则它不匹配。然后,您可以使用 Wiktor 的模式将其分解为捕获组。