在任何单词顺序正则表达式匹配字符串

时间:2013-11-10 22:55:42

标签: regex word

我必须编写一些模式,这些模式将在用户输入时通过Regex用于匹配目的:

string pattern = "^.*overview\ of\ sales.*customer\ information.*$";
string input = "overview of sales with customer information";

有没有办法删除正则表达式中的单词顺序?所以

string pattern = "^.*overview\ of\ sales.*customer\ information.*$";

也会匹配:

string input = "customer information with overview of sales";

这可以通过以相反的顺序编写每个模式来完成,但是因为模式的数量很少并且会随着时间和数量*而增长。这往往是繁琐的做法,所以请指导这件事。

1 个答案:

答案 0 :(得分:12)

您希望使用positive lookahead ?=.*

  

[正向前瞻] q(?=u)匹配一个后跟一个u的q,而不会使u成为匹配的一部分。积极的先行构造是一对括号,左括号后跟一个问号和一个等号。

在这种情况下可以使用正向前瞻来匹配任何顺序的一组模式,如下所示:

(?=.*customer)(?=.*information)(?=.*with)(?=.*overview)(?=.*of)(?=.*sales)

Regular expression visualization

Debuggex Demo Here

要修改,只需根据需要添加,编辑或删除字词。

修改

在这里找到一个解释相同概念的问题:https://stackoverflow.com/a/3533526/2081889