2013-01-11 183 views
0

我有一個有趣的小任務。我需要設置一個變量爲true,如果:正則表達式檢查字符串的第二個字母

字符串以字母結尾或字符串中的第二個數字是「p」或「r」。

到目前爲止,我有

var endingIsLetter = Regex.(myString.length - 1) ??? magic here. 

任何幫助嗎?我的正則表達式好友在一臺死的筆記本電腦上。

編輯 - REGEX不是必需的。我只是認爲這將是完成這件事的最簡單的方法。任何例子都歡迎。

+3

爲什麼要使用正則表達式來實現像這樣簡單的事情? –

回答

4

爲什麼使用正則表達式呢?

var flag = char.IsLetter(s[s.Length - 1]) || 
      s[1] == 'p' || 
      s[1] == 'r'; 
3

回想.代表單個字符,^爲字符串的開頭的錨定,$爲字符串的末尾的錨,並且[pr]是在方括號之間的列表中的任何單個字符。

^.[pr] 

意味着「第二個字母是pr

[A-Za-z]$ 

的意思是 「最後一個字符是字母」。

Console.WriteLine(Regex.IsMatch("abc123", "^.[pr]|[A-Za-z]$")); // False 
Console.WriteLine(Regex.IsMatch("abc12x", "^.[pr]|[A-Za-z]$")); // True 
Console.WriteLine(Regex.IsMatch("apc123", "^.[pr]|[A-Za-z]$")); // True 
Console.WriteLine(Regex.IsMatch("arc123", "^.[pr]|[A-Za-z]$")); // True 
Console.WriteLine(Regex.IsMatch("", "^.[pr]|[A-Za-z]$"));  // False 

Demo on ideone

+1

你應該使用'|' –

+0

'^ [[pr] | [a-zA-Z] $'我猜)把它放在一個正則表達式中。 – horgh

2

你必須使用正則表達式?或者這是可選的?因爲代碼與正則表達式實際上可能會更快。 :)

要在字符串匹配第二個字符:^.[pr] 以匹配字符串中的最後一個字符:[a-z]$

組合:^.[pr]|[a-z]$

  • ^的字符串開始處匹配
  • $匹配字符串的末尾
  • .匹配任何字符(除了根據您的設置換行符)
  • [...]提供了一個選擇「任何一個」,在這裏你可以定義範圍,以及
  • [a-z]表示從範圍a通過z任何字符。請注意,這不包括而不是包括諸如元音變音等。

注意的是,上述正則表達式預計區分大小寫的匹配才能正常工作(否則你就必須添加大寫字符爲好):^.[PRpr]|[A-Za-z]$

要獲得正則表達式的快速預覽(以如果我不確定)我更喜歡Regex Hero Tester

0
var match = Regex.Matches(@"\w(p|r)+*\w", "Eppressio9n") 

啊,我只是有點這樣做,因爲我現在必須離開工作。

我忘記了Regex.Matches返回的結果,你所要做的就是檢查是否有任何從Regex.Matches返回的東西。

希望這會有所幫助

相關問題