正则表达式检查字符串的第二个字母

时间:2013-01-11 01:57:46

标签: c# regex

我有一个有趣的小任务。如果符合以下情况,我需要将变量设置为true:

字符串以字母结尾或字符串中的第二位数字为“p”或“r”。

到目前为止,我有

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

有任何帮助吗?我的正则表达伙伴在一台死机笔记本电脑上。

编辑 - 不需要REGEX。我只是认为这是完成这项工作的最简单方法。欢迎任何例子。

4 个答案:

答案 0 :(得分:4)

为什么要使用正则表达式?

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

答案 1 :(得分: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

答案 2 :(得分:2)

你必须使用正则表达式吗?或者这是可选的吗?因为没有正则表达式的代码实际上可能更快。 :)

匹配字符串中的第二个字符:^.[pr] 要匹配字符串中的最后一个字符:[a-z]$

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

  • ^匹配字符串的开头
  • $匹配字符串的结尾
  • .匹配任何字符(换行符,具体取决于您的设置)
  • [...]提供“任何这些”选项,您也可以在其中定义范围
  • [a-z]代表az范围内的任何字符。请注意,包含像变形虫这样的东西。

请注意,上面的正则表达式要求不区分大小写的匹配才能正常工作(否则您还必须添加大写字符):^.[PRpr]|[A-Za-z]$

要快速预览正则表达式(如果我不确定),我更喜欢Regex Hero Tester

答案 3 :(得分:0)

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

哎呀,我刚才有点这样做,因为我现在不得不离开工作岗位。

我忘记了Regex.Matches返回的内容,你要做的就是检查Regex.Matches是否有任何返回。

希望这有帮助