【问题标题】:Exactly one occurrence in regex正则表达式中恰好出现一次
【发布时间】:2014-06-26 19:56:06
【问题描述】:

我有一个正则表达式:

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

than 在恰好一个左大括号和右大括号内检测到一个字符串:( [ {,即使字符串中的任何位置都有任意数量的空格。

但问题是它还会检测到'an',如果不在大括号内。如何指示正则表达式仅在一个左大括号和右大括号内检测字符串“an”。

abc an abc 不应匹配。

我想匹配如下字符串:

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

括号类型可以匹配吗?我的意思是可以只匹配那些右括号和左括号相同的吗?

【问题讨论】:

  • 你有什么尝试吗?
  • 你能放一些工作,不工作的例子
  • 你想用空格匹配an吗?

标签: c# asp.net .net regex


【解决方案1】:

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

@"\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*\]

我确信有一个更漂亮的方法,但它现在正在逃避我。

【讨论】:

  • 可以匹配括号吗?我试过没有空格,没有用。
  • 试试[\(\{\[]\s*a\s*n\s*[\)\}\]]
  • 尝试\s*\[\s*[a]\s*[n]\s*\]\s*|\s*\(\s*[a]\s*[n]\s*\)\s*|\s*\{\s*[a]\s*[n]\s*\}\s* 来匹配括号。每个括号模式由| 分隔。
  • 好的,好像成功了。但是为什么[\(\{\[] 甚至没有检测到括号的出现?我认为它会完全匹配一次。
  • 当您使用方括号匹配这些括号内的任何字符时,空格将被视为要匹配的空格。您的原始模式中有空格,因此这些空格正在匹配。如果您检查返回的MatchValue,您很可能会看到那些前导和尾随空格。
【解决方案2】:

试试这个:

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

这只允许以下字符串:

[ ( {an} ] )

【讨论】:

  • an 之间可能有零个或多个空格
猜你喜欢
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 2012-01-12
  • 2019-12-06
相关资源
最近更新 更多