.net 正则词边界混淆

.net 正则词边界混淆,.net,regex,.net,Regex,从我读到的if,我想捕捉我可以使用单词边界的特定单词 我有以下资料 First: 12345Z Apr 16 Something WORD: ABC Notification #1234 Key1 Key2 Key3 Key4 Second: 12345Z Apr 16 Something WORD: ABC Notification #1234 Key5 Key3 Key6 Third: 12345Z Apr 16 Something WORD: ABC Notification #1234

从我读到的if,我想捕捉我可以使用单词边界的特定单词

我有以下资料

First: 12345Z Apr 16 Something WORD: ABC Notification #1234 Key1 Key2 Key3 Key4
Second: 12345Z Apr 16 Something WORD: ABC Notification #1234 Key5 Key3 Key6
Third: 12345Z Apr 16 Something WORD: ABC Notification #1234 Key7 Key6
我使用了下面的正则表达式,当我需要匹配
Key3-Key4-Key6-Key7

(?<=#\d{4}\s)(\b(Key3|Key4|Key6|Key7)\b)
(?试试这个

(?:#\d{4}|\G)\s(\b(?:Key3|Key4|Key6|Key7)\b)

还是这个

(?:#\d{4}|\G) \b(?:(Key3|Key4|Key6|Key7)|\w+)\b

说明:
(?:…)
:非捕获组
\
:转义特殊字符
|
:交替/或操作数
\G
:字符串的开头或上一个匹配的结尾
\s
:“空白字符”:空格、制表符、换行符、回车符、垂直制表符

(…)
:捕获组

问题是您的正则表达式不允许在
+4位数字和您感兴趣的键之间存在任何内容。您可以通过向lookback添加可选的
(?:\s+\w+*
模式来轻松修复它,该模式将匹配零个或多个1+空格和1+字字符序列:

(?<=#\d{4}(?:\s+\w+)*)\s*\b(Key3|Key4|Key6|Key7)\b
          ^^^^^^^^^^^  

如果在
#1234
之后没有任何键,那么您所做的将与任何键都不匹配。谢谢您的更新,我刚才也注意到了。谢谢您的帖子
var strs = new List<string> { "First: 12345Z Apr 16 Something WORD: ABC Notification #1234 Key1 Key2 Key3 Key4",
"Second: 12345Z Apr 16 Something WORD: ABC Notification #1234 Key5 Key3 Key6",
"Third: 12345Z Apr 16 Something WORD: ABC Notification #1234 Key7 Key6"};
foreach (var s in strs) {
    var result = Regex.Matches(s, @"(?<=#\d{4}(?:\s+\w+)*)\s*\b(Key3|Key4|Key6|Key7)\b")
        .Cast<Match>()
        .Select(m => m.Value)
        .ToList();
    foreach (var e in result)
        Console.WriteLine(e);
}