正则表达式:只匹配一次出现的字符

时间:2013-10-16 01:21:19

标签: c# regex

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

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

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

2 个答案:

答案 0 :(得分:4)

问题在于,给定输入字符串"ttgg",您的模式将很乐意与子字符串 "ttg"匹配。尝试在模式周围放置开始(^)和结束($)锚点以禁止额外的前导或尾随字符。除此之外,你可以非常简单地模仿你的模式:

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

这将匹配:

  • 字符串的开头(^
  • 一个或多个t字符
  • 可选的g字符
  • 字符串的结尾

答案 1 :(得分:1)

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

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

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

相关问题