2

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

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

到目前为止,我有

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

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

编辑——不需要正则表达式。我只是认为这将是完成这项工作的最简单方法。欢迎任何例子。

4

4 回答 4

5

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

var flag = char.IsLetter(s[s.Length - 1]) || 
           s[1] == 'p' || 
           s[1] == 'r';
于 2013-01-11T01:59:54.567 回答
3

回想一下,.表示单个字符,^是字符串开头的$锚点,是字符串结尾的锚点,并且[pr]是方括号之间列表中的任何单个字符。

^.[pr]

意思是“第二个字母是por r

[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

ideone 上的演示

于 2013-01-11T02:00:47.567 回答
3

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

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

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

  • ^匹配字符串的开头
  • $匹配字符串的结尾
  • .匹配任何字符(根据您的设置,换行符除外)
  • [...]提供选择“其中任何一个”,您也可以在其中定义范围
  • [a-z]a表示从范围到的任何字符z。请注意,这不包括变音符号之类的东西。

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

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

于 2013-01-11T02:03:41.750 回答
0
var match = Regex.Matches( @"\w(p|r)+*\w", "Eppressio9n" )

啊,我只是突然间做了这件事,因为我现在必须去上班。

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

希望这可以帮助

于 2013-01-11T02:15:36.810 回答