Regex-模式捕获除模式[.net]之外的所有内容

Regex-模式捕获除模式[.net]之外的所有内容,.net,regex,.net,Regex,我想捕捉任何高达,但不包括一个特定的模式。我的实际问题与解析html中的信息有关,但我将问题归结为一个示例,希望能够澄清我的问题 来源 xaxbxcabcabc 所需匹配项 xaxbxc 如果我使用前瞻,表达式将捕获第一个事件 .*(?=abc) => xaxbxcabc 我想要一些类似于否定字符类的东西,只是为了一个否定模式 .*[^abc] //where abc as a pattern instead of a list giving anything but a, b or

我想捕捉任何高达,但不包括一个特定的模式。我的实际问题与解析html中的信息有关,但我将问题归结为一个示例,希望能够澄清我的问题

来源

xaxbxcabcabc
所需匹配项

xaxbxc
如果我使用前瞻,表达式将捕获第一个事件

.*(?=abc) => xaxbxcabc
我想要一些类似于否定字符类的东西,只是为了一个否定模式

.*[^abc] //where abc as a pattern instead of a list giving anything but a, b or c
我正在使用用于测试

为什么不使用:

这将删除从第一个匹配短语开始的所有内容,留下到该点为止的所有内容。

非贪婪(懒惰)量词
*?
在这里可能很有用,例如

^(?<captured>.*?)abc.*$

如果锚定正则表达式,您将解决问题(+使用惰性量词):


您可能会发现自己也是一名优秀的测试人员。@Mormegil使用
*?
的答案正是您想要的答案。仅供参考,它可能具有负前瞻性,因此您的最后一个代码块将成为
*(?!abc)
。然而,这似乎与你的处境无关,也不是消极的回头看
*(?!abc)
将从您的示例中捕获
xaxbxcabc
*(?将捕获
xaxcabca
@Matti-我理解使用regex解析html的反对意见。我的情况可能(或者我很容易出错)可能有点不同。在这种情况下,我试图从特定页面中提取特定信息,该页面的html格式不好,并且不包含与内容含义相关的语义信号。我使用正则表达式查找内容含义的上下文指示。结果将是一个脆弱的数据捕获函数,我知道我将使用它只要网站所有者更改标记,就可以随时编辑。在理想情况下,他们会提供一个api,或者至少生成更好的html。@driis-谢谢你的建议,我会去测试人员那里。谢谢你的回答。对于我使用的示例,这不仅有效,而且可能是最干净的解决方案。但是,在我正在使用的情况下,它会我将添加一个步骤。我正在使用查找来启动模式。因此,我必须在查找之后匹配所有内容,然后对该匹配进行替换。感谢您的回复。这是我决定使用的解决方案。感谢您的回复。我希望我能选择多个可接受的答案。
^(?<captured>.*?)abc.*$
(.*?)abc
"^.*?(?=abc)"