可以匹配正则表达式的一个位置而不是另一个位置(例如位置异或)?

时间:2011-12-02 22:39:51

标签: .net regex lookaround balancing-groups

我希望在更大的正则表达式中创建几个子表达式,其中每个子表达式匹配输入中的一个位置或另一个位置的某些内容,但不是两个地方都匹配,最好是每个“感兴趣的区域使用相同的命名组” ”。例如,我想匹配下面斜体中的体积单位和货币单位,以粗体显示。

  • $ 3.23 USD / gal
  • USD 3.23 in 加仑
  • 4.50 CAD / gal
  • 1 gal @ USD 3.23
  • 10 gal 。 @ $ 4.50 CAD

或更一般地说:

  • stuffmorestuff XXX yetmorestuff
  • 东西 XXX morestuff

其中 stuff morestuff 可能是一组复杂的子表达式。

似乎可以使用

的某种组合
  • group stack push / pop
  • 平衡小组
  • 环视

但我不知道该怎么办。它是否归结为轮换(|)或具有不同表达式的多次传递(我认为它们是相同的东西)?

1 个答案:

答案 0 :(得分:1)

您可能需要使用交替,这样的事情?

^(stuffmorestuff)XXX(yetmorestuff)|(stuff)XXX(morestuff)$

但最终会有四个捕获组。如果对多个组使用相同的组名,则不确定.NET正则表达式引擎的行为方式。