[Hi my name is Tom Baker.]
[Hi my name is Jim
Knopf.]
[Hi my name is Ben Hubbard.]
我需要一个C#/ .Net的正则表达式匹配“[我的名字是{除了”Ben“之外的任何东西}} {任何可以遵循的}}”
我查找了解释如何排除单词的所有示例,但它们都与正则表达式不匹配。我想要完全相反。
如果正则表达式的其他规则适用,但不包含单词X,那就是匹配。
其他问题:此正则表达式需要是多行正则表达式。
到目前为止我得到的是:
(?m)\[Hi my name is (.|\r|\n).*?\]
而不是(。| \ r | \ n)中的第一个点,我需要一个基本上表示“如果此部分不包含'Ben'则表示匹配”的表达式。
修改
对不起,我需要以两种方式调整我的请求,当我看到给定的答案时,我才意识到这些信息已被忽略。
1)我写的时候
我需要一个C#/ .Net的正则表达式匹配“[我的名字是{除了”Ben“之外的任何东西}} {任何可以遵循的}}”
我的意思是
我需要一个与C#/ .Net相匹配的正则表达式“[我的名字是{任何东西都可以在这里} {除了”Ben“之外的任何东西} {}任何东西都可以在这里}]”
2)正则表达式本身必须包含多行正则表达式的规则,这就是为什么\ r \ n和/或(?m)是我第一次尝试的原因,由于复杂的原因我不能使用Multiline选项在构造Regex实例时。
尝试用另一个例子来设想我的问题:想象一下,你试图找到你的C#代码中没有实现IDisposable的所有类。在类名和冒号之后的任何地方都有许多接口,其中一个可能是也可能不是IDisposable。类声明仅在实际实现的开始时
结束public class Test : BaseTest, IDisposable, ICloneable { //no match
public class Test : BaseTest
, ICloneable
, IDisposable
{ //no match
public class Test : BaseTest
, ICloneable
{ //match
这就是我想要完成的事情。
答案 0 :(得分:2)
尝试:
\[Hi,? my name is (?!Ben)[^\]]+\]
[Hi my name is
Hi
Ben
]
你可以像以下一样使用它:
string str = @"[Hi my name is Tom Baker.]
[Hi my name is Jim
Knopf.]
[Hi, my name is Ben Hubbard.]";
var pattern = @"\[Hi,? my name is (?!Ben)[^\]]+\]";
var result = Regex.Matches(str, pattern, RegexOptions.Multiline);
//result contains [Hi my name is Tom Baker.] and [Hi my name is Jim Knopf.]
如果您不想要包含逗号的匹配项,则可以排除,?
答案 1 :(得分:0)
这将匹配名称不是开头的所有行与" Ben" (所以Ben Hubbard
将不匹配,但Hubbard Ben
会:)
(?m)\[Hi my name is ((?!Ben)|\r|\n).*?\]
如果您想匹配任何不等于Ben
的名称(因此Ben
匹配,但Ben Hubbard
将匹配),您必须使用此正则表达式:
(?m)\[Hi my name is ((?!Ben).*|Ben.+|\r|\n)\]
如果您希望{em} (<{1>} (甚至Ben
不匹配),则以下正则表达式将完成此任务:
John McBenson