C#Regex-以pattern1开头,不包含pattern2
对于以下内容,输入字符串包含所有这些内容:C#Regex-以pattern1开头,不包含pattern2,c#,regex,C#,Regex,对于以下内容,输入字符串包含所有这些内容: a1.aaa[认购] a1.bbb a1.ccc b1.ddd d1.ddd[认购] 我想得到输出: bbb ccc 这意味着:在“a1”之后的所有单词,不包含子字符串“[SUBSCRIBED]” 所有单词都在“a1”之后,不包含子字符串 “[订阅]” 为什么是正则表达式?以下是非常清楚的: var result = strings .Where(s => s.StartsWith("a1.") && !s.Con
- a1.aaa[认购]
- a1.bbb
- a1.ccc
- b1.ddd
- d1.ddd[认购]
- bbb
- ccc
var result = strings
.Where(s => s.StartsWith("a1.") && !s.Contains("[SUBSCRIBED]"))
.Select(s => s.Substring(3));
蒂姆的回答有道理。然而,如果你坚持的话,我敢说正则表达式看起来是这样的
^a1\.(.*)(?<!\[SUBSCRIBED\])$
^a1\.(.*)(?
带^a1
表示以a1开头
\.(.*)
使用任意数量的字符
负查找(?将拒绝以[SUBSCRIBED]结尾的文本
^a1\.(?!.*\[SUBSCRIBED])(.*)
看
详细信息
^
-字符串的开头
a1\.
-文本a1.
子字符串
(?!.\[SUBSCRIBED])
-如果在任何0+字符后出现[SUBSCRIBED]
子字符串,则会导致匹配失败的负前瞻(如果未使用RegexOptions.Singleline
选项,则换行符除外)
(.*)
-第1组:行的剩余部分,直到最后(如果使用RegexOptions.Singleline
选项,
也将匹配换行符)
C#代码:
我肯定我以前见过这个问题……你尝试过什么?请发表一篇欢迎StackOverflow的文章,请花一点时间回顾一下教程:,如何创建一个最小的、完整的、可验证的示例:,更具体地说,如何提出好的问题-如果你对你的问题进行思考,你会得到更好的反馈和有用的答案在你来寻求帮助之前,你要用一个特定的问题来解决问题,你自己努力解决问题。一旦你有了具体的问题,你就可以编辑你的帖子。这将是“a1”的长度。(它将是一个变量)@bensagi1989:regex效率不高,无论您使用变量还是“a1”。
。使用s.StartsWith(variable)
和s.Substring(variable.length)
因为OP说a1
将是可变长度的,而且因为他们似乎不接受b1.ddd
->ddd
,所以regex将不起作用,除非OP添加一个MCVE来显示a1
变量是如何处理的。我假设在构建regex字符串时,应该在“a1”的位置注入变量像expressions=$“^{variable}\(.*)(?)?
var result = string.Empty;
var m = Regex.Match(s, @"^a1\.(?!.*\[SUBSCRIBED])(.*)");
if (m.Success)
{
result = m.Groups[1].Value;
}