尽可能多的匹配,而不是向前看

本文关键字:向前看 尽可能 | 更新日期: 2023-09-27 18:04:58

我想匹配wiki列表#,但不匹配if *或:跟随#。例如

# Something -> Match
#* Something -> Not match
## Something -> Match
##* Something -> Not matched
##: Something -> Not matched

我想出了下面的正则表达式:

Regex.Match("##* Something", @"^#+(?![*:])'s*(?<Definition>.*?)'s*$").Groups["Definition"]

但是定义值是'#* Something'。我发现(?![*:])导致#+只匹配一次,而不是像上面的例子那样多次匹配——有两个#,但只匹配第一个。

我怎样才能写出匹配的模式呢?

多谢

尽可能多的匹配,而不是向前看

你需要修改你的前瞻性:

@"^(?!#+[*:])#+'s*(?<Definition>.*?)'s*$"

现场演示

如果好的是"#"后面加空格:(那么就不需要定义"*"或":")

^#+'s(?<Definition>.*?)'s*$

或if(1)字符可以跟在还不是空格的"#"后面,但不能是":"或"*"。

^#+[^:'*]?'s(?<Definition>.*?)'s*$