匹配正则表达式中的多个零星组

时间:2009-06-19 18:11:04

标签: c# regex

我正在处理一些以专有字符串格式存储数据的遗留代码,我正在尝试创建一个正则表达式,以便更轻松地解析此格式。

我遇到的问题是格式包含可以偶尔重复多次的组。例如,通常数据看起来像(A)(B)(B)(B),但有时它可以有多个(A)像这样(A)(B)(B)(B)(A) (B)(B),或甚至(A)(A)(B)(B)(B)。 (B)的重复次数也可以变化,少数也可以变化很多。

当数据看起来像(A)(B)(B)时,我当前的正则表达式正常工作......但是当字符串中有另一个(A)之后它会中断。第一个(A)被抓住了,但剩下的所有(A)都没有。

所以基本上现在我有一个正则表达式,它有一个用于解析(A)的组和一个用于解析(B)的组,这些组可以独立工作,但我无法弄清楚如何将这些组合起来在它们之间使用正确的重复语法,以便找到分散的匹配,而不是仅查找第一个,其余的被忽略。

我只是遗漏了一些东西,还是我必须将我的正则表达式分成两个单独的并分别解析(A)和(B)? (我正在使用C#/ .Net)

3 个答案:

答案 0 :(得分:4)

如果您的工作模式与(A)匹配,而另一个匹配(B),则表达式与任意数量的匹配

(?:(A)|(B))*

如果你需要的话,没有必要去看看。此表达式会同时匹配(A)(B),但会将组的捕获保留为AB级别。

答案 1 :(得分:0)

查看当前的正则表达式会有所帮助。

要匹配A或B的任何序列,请使用以下

           (A*B*)*

任意数量的A组跟随任意数量的B

这将匹配空字符串,以确保至少有一些数据:

           (A|B)(A*B*)*

或者数据始终以A开头(如所有示例中所示)

            A(A*B*)*   

答案 2 :(得分:0)

我会把你想要匹配的每个个体部分放在他们自己的组中,放一个| charachter。然后,我将使用switch语句编写一个函数/方法。 通过这种方式,您可以匹配组1或2 ...并对不同的结果做出反应。