1

我找不到Regex与此匹配的正确代码:

  • tttttg必须是真的
  • tg必须是真的
  • tgg一定是假的
  • tttgg一定是假的
  • t必须是真的
  • ttt必须是真的
  • g一定是假的
  • gggg一定是假的

可以有任意数量的出现,t但至少有一个,并且可以选择g在结尾只出现 a。我试过Match match = Regex.Match("ttgg", @"[t]+{g}|[t]+");了,但它返回 true,它必须返回 false,因为有 2 个g并且只能有一个。

4

2 回答 2

5

问题是,给定输入字符串 ,"ttgg"您的模式将愉快地匹配子字符串 "ttg"。尝试在您的模式周围放置 start ( ^) 和 end ( $) 锚,以禁止额外的前导或尾随字符。除此之外,您可以显着简化您的模式:

Match match = Regex.Match("ttgg", @"^t+g?$")

这将匹配:

  • 字符串的开头 ( ^)
  • 一个或多个t字符
  • 可选g字符
  • 字符串的结尾
于 2013-10-16T01:22:53.380 回答
1

要使用的正则表达式是:"\bt\b|t+g\b|\bt+\b"

\bt\b匹配唯一的 t - 单词边界,'t',单词边界。 t+g\b匹配余数 - 一个或多个 't' 和一个和一个只有 g。

我假设您的目标不一定从行首开始。

于 2013-10-16T01:31:56.697 回答