首页 新闻 会员 周边

关于 C# match 正则表达式的问题?

0
悬赏园豆:10 [待解决问题]

在 Leetcode 上有一个问题, 是说给出一个 string 数组, 输出其中可以在英文键盘上同一行打出来的字符串. 我当时的想法是用正则表达式, 代码如下:

public string[] FindWords(string[] words)
{
  return words.Where(x => Regex.Match(

    x, @"[qwertyuiop]*|[asdfghjkl]*|[zxcvbnm]*",

    RegexOptions.IgnoreCase).Value == x).ToArray();

}

也验证了正则表达式的正确性 ,可是 Match 得到的结果总是和理想中的不一样, 如输入:

["a", "b", "p", "Hello"] 得到的结果只有一个 "p" 而且我发现根据表达式中 "*" 与 "|" 之间是否加空格, 得到的结果也各有不同.

请问问题是在哪里? 谢谢!

wu_overflow的主页 wu_overflow | 初学一级 | 园豆:192
提问于:2017-03-16 11:26
< >
分享
所有回答(2)
0

写个循环还更方便点.

会不会是没加括号

吴瑞祥 | 园豆:29449 (高人七级) | 2017-03-16 13:30

或许循环快一些, 只是想就这个解决方法请教一下为什么我在 "|" 和 "*" 之间添加不同的空格会有不同的结果? 以及这个表达式错在哪里?

支持(0) 反对(0) wu_overflow | 园豆:192 (初学一级) | 2017-03-16 13:32

@wu_overflow: 空格会被当成和一个需要匹配的字符吧.

而且如果是判断一整个字符串都能被一行打出来.那直接加开头结尾约束就好了

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-03-16 13:35
0

这个用正则做比较亏吧。应该是把键盘上一行字符的ascii堆一起来判断吧。

Daniel Cai | 园豆:10424 (专家六级) | 2017-03-17 18:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册