在 C# 中使用正则表达式匹配 a^n b^n c^n(例如“aaabbbccc”)

Posted

技术标签:

【中文标题】在 C# 中使用正则表达式匹配 a^n b^n c^n(例如“aaabbbccc”)【英文标题】:Matching a^n b^n c^n (for example “aaabbbccc”) using regular expressions in C# 【发布时间】:2015-04-23 21:17:21 【问题描述】:

您可以轻松地使用正则表达式来验证常规语言。我的问题是你能用它来验证上下文相关的语言吗?层次结构中的现代正则表达式有多强大?

您将如何创建一个正则表达式来检查与 a^n b^n c^n 匹配的字符串?

以下情况应匹配:

abc
aabbcc
aaabbbccc

以下情况不应匹配:

abbc
aabbc
aabbbccc

【问题讨论】:

n 已知吗?还是任何数字,只要所有字母的数字都相同? @Robbert 听起来像后者 相关:Capturing Quantifiers and Quantifier Arithmetic 有什么意义?它不是正则语言,正则表达式是错误的工作工具。您也许可以通过使用非标准/荒谬的解决方案来强制它工作,但再次......有什么意义...... @JeffMercado:关键是要确定问题中写了什么,我想:“现代正则表达式在层次结构中有多强大?” 【参考方案1】:

.NET 提供了balancing groups,您应该可以使用它来执行此操作;类似:

^(?<n>(?<o>a))*(?<-n>b)*(?<-o>c)*(?(n)(?!))(?(o)(?!))$

对于每个 a,递增 no,对于每个 b 递减 n,然后对于每个 c,递减 o,然后如果任一计数器为仍然大于零。

【讨论】:

没想到竟然能做出这种事! @minitech - 恭喜声望达到 10 万!

以上是关于在 C# 中使用正则表达式匹配 a^n b^n c^n(例如“aaabbbccc”)的主要内容,如果未能解决你的问题,请参考以下文章

java正则表达式

正则表达式字符匹配

正则表达式初步认识

Python全栈_Day11_grep和正则表达式

正则表达式以啥结尾

C#正则表达式