我需要正则表达式来满足两个条件:
\b\w*foo\w*\b
\b\w{N,M}\b
如何统一这两个条件?
如果使用OR可以使N和M为小。
N = 4且M = 5
(\bfoo\w{1,2}\b)|(\b\wfoo\w{0,1}\b)|(\b\w\wfoo\b)
但是这种方法很可怕。 N = 4,M = 20
答案 0 :(得分:3)
要“和”多个模式,您可以使用零宽度前瞻。我不知道C#是否支持这些。在Perl中,它看起来像:
/
\b
(?= \w{N,M} \b )
(?= \w* foo \w* \b )
/x
或
/
\b
(?= \w{N,M} \b )
\w* foo \w* \b
/x
或
/
\b
(?= \w{N,M} \b )
\w* foo
/x
但是,通常最好不要将所有东西都塞进一个模式中。我会写
my @words = /\b\w{N,M}\b/g; # Find what we define to be words.
grep /foo/, @words # Check if any of them are acceptable to us.
(对不起,那是Perl,但我不知道C#。只是想提出想法。)
答案 1 :(得分:0)
我认为在这种情况下最明智的是不加入两个正则表达式。只需进行两次正则表达式搜索,或者首先找到符合其中一个正则表达式的单词,然后在其他正则表达式中搜索您找到的每个单词。乍一看,使用foo
语法指定{}
之前和之后的元素数量似乎并不容易。