2013-10-16 54 views
1

我无法找到合适的Regex代码以符合本:正则表达式:匹配字符仅出现一次

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

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

回答

4

问题是,给定输入字符串"ttgg",您的模式将愉快地匹配子串"ttg"。尝试在模式周围放置开始(^)和结束($)锚点以禁止多余的前导或尾随字符。除此之外,你可以显著只是你的模式是:

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

这将匹配:

  • 字符串的开始(^
  • 一个或多个t字符
  • 的可选g字符
  • 字符串的末尾
+0

谢谢你完美的工作 –

1

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

\bt\b独行t匹配 - 单词边界, 'T',单词边界。 t+g\b匹配其余部分 - 一个或多个't'和一个和一个g。

我假设你的目标不一定开始在行的开始。

+0

你是对的,我已经更新了答案 –

相关问题