我需要一些帮助才能为字符匹配编写正则表达式。场景是我有一个大约300 000行的文本文件,每行有一个单词。我需要找到与某组字符匹配的单词。
将Scrabble视为一个非常相似的示例,其中用户有一组字符,例如 PES 加上通配符字符,可以匹配任何字符(但是只有一次。
如果文本文件包含以下字词:
...只有粗体字才能匹配,因为每个用户的字符(包括通配符)在匹配时最多只能使用一次。
有没有办法为此编写正则表达式?
我已经开始......:
\ B [P,E,S] \ B'/ P>
...但不知道我应该如何表达:
提前谢谢!如果我需要澄清问题,请告诉我。
//彼得
答案 0 :(得分:1)
使用正则表达式(如果可能的话)这不是很容易。 更简单的是这样的事情:
List<char> set = new List<char>("PES");
string s = "PIES";
bool matches = s.Count(ch => !set.Remove(ch)) < 2;
答案 1 :(得分:1)
不可能是什么:
您可以使用lookahaeds使用正则表达式执行此操作:
(?=^.+$)(?=^[^P]*?P?[^P]*?$)(?=^[^E]*?E?[^E]*?$)(?=^[^S]*?S?[^S]*?$)
基本上,如果你将其分解,有五个组成部分:
首先前瞻:
(?=^.+$)
检查长度是否> = 1
然后是三个部分:
(?=^[^P]*?P?[^P]*?$)
表示E和S分别检查是否存在最多1个这样的字符。
上面只是告诉检查整个字符串是否出现一次P.如果发现多于一个P,则正则表达式失败。同样适用于以下两个前瞻。
对于通配符,我必须考虑一种明智的方法:)..