.net 正则词边界混淆
从我读到的if,我想捕捉我可以使用单词边界的特定单词 我有以下资料.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
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);
}