繁体   English   中英

正则表达式匹配N和M个字符之间的单词并包含固定的子字符串

[英]Regular expression matching words between N and M characters and containing a fixed substring

对于同时满足两个条件的单词,我需要使用正则表达式:

  1. 包含一个子字符串(例如foo): \\b\\w*foo\\w*\\b
  2. 固定字符数\\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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM