[英]Regular expression matching words between N and M characters and containing a fixed substring
对于同时满足两个条件的单词,我需要使用正则表达式:
\\b\\w*foo\\w*\\b
\\b\\w{N,M}\\b
如何统一这两个条件?
如果N和M小,则可以使用OR。
N = 4和M = 5
(\bfoo\w{1,2}\b)|(\b\wfoo\w{0,1}\b)|(\b\w\wfoo\b)
但是这种方法对于例如来说是可怕的。 N = 4,M = 20
要“和”多个模式,可以使用零宽度预行。 我不知道这些在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#。只是想提出一些想法。)
我认为在这种情况下,最明智的做法是不要同时加入这两个正则表达式。 只需进行两次正则表达式搜索,或者首先找到符合其中一个正则表达式的单词,然后在另一个正则表达式中搜索找到的每个单词。 乍一看,用{}
语法指定在foo
之前和之后有多少个元素似乎并不容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.