谁能帮我写一个正则表达式?

时间:2016-04-25 06:03:53

标签: c# .net regex

我想在字符串cckk的开头找到多行文本,并且必须包含字符串c3c4,但不能包括字符串ddee,以下测试数据:

t1 b1 cc
c3 c4 z1
t3 dd kk

t4 b2 cc
c4 c3 z2
t6 ee kk

t7 b3 cc
c3 c4 z3
t9 ff kk

t7 b3 cc
c4 c3 z3
t9 ff kk

预期结果且仅限:

cc
c3 c4 z3
t9 ff kk

cc
c4 c3 z3
t9 ff kk

我写了一个正则表达式(C#),但不期望这个结果。

2 个答案:

答案 0 :(得分:2)

在匹配每个单个字符之前,您需要使正则表达式引擎检查条件。

@"(?s)\bcc\b(?:(?!dd|ee).)*?\bkk\b"

DEMO

(?:(?!dd|ee).)*?应匹配ddee但不属于任何字符,零次或多次(非贪婪)。 \

更新

(?s)\bcc\b(?:(?!\bdd\b|\bee\b).)*?\bc3\b(?:(?!\bdd\b|\bee\b).)*?\bkk\b

答案 1 :(得分:1)

试试这个

cc(?:\s(?!dd|ee)\w{2})*\skk

Regex demo

<强>解释
(?: … ):非捕获组sample
\s:“空格字符”:空格,制表符,换行符,回车符,垂直制表符sample
(?!…):否定前瞻sample
|:替代/或操作数sample
\w:“单词字符”:ASCII字母,数字或下划线sample
*:零次或多次sample

(?!dd|ee)\w{2} 2个字符,但ddee sample