在正则表达式中恰好出现一次

时间:2014-06-26 19:56:07

标签: c# asp.net .net regex

我有正则表达式:

@"\s*[\( \[ \{]\s*[a]\s*[n]\s*[\} \] \)]\s*"

在一个开始和结束大括号中检测一个字符串:( [ {即使字符串中有任意数量的空格。

但问题是,如果不在括号内,它也会检测到'an'。如何指示正则表达式检测字符串''只在一个开合括号内。

abc an abc不匹配。

我想匹配字符串:

abc [ an ] abc
abc { a n } abc
abc   (   a       n     ) abc

括号类型可以匹配吗?我的意思是,是否可以仅匹配具有与括号相同的右括号的那些?

2 个答案:

答案 0 :(得分:3)

尝试删除方括号中的空格。它很可能与那些匹配。

@"\s*[\(\[\{]\s*[a]\s*[n]\s*[\}\]\)]\s*"

另外,FWIW,这种模式并不检查以确保括号相同。它会得到,例如[an}(an]

为此,您需要以下内容:

\(\s*a\s*n\s*\)|\{\s*a\s*n\s*\}|\[\s*a\s*n\s*\]

我确信这是一种更漂亮的方式,但它现在正在逃避我。

答案 1 :(得分:1)

试试这个:

^(\[ \( \{an\} \] \))$

这只允许跟随字符串:

[ ( {an} ] )