2013-10-16 296 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

你是對的,我已經更新了答案 –