正则表达式 - 避免字符

时间:2010-12-02 07:46:25

标签: c# regex regex-negation

在C#中使用一些正则表达式时,我遇到了以下问题:

考虑这个简单的字符串: ~0~这是一个简单的文字~POP~NIZ~0~0~

我想在两个'〜'之间选择任何字符串,其中包含超过3个字符,当然除了'〜'。在我的例子中,将是:

这是一个简单的文字

我可以做类似的事情:([\ w] | [\ d] |。| \,.................){4-500}

我会以一个非常长的正则表达式结束,无法调试且不可读......

相反,我更喜欢创建一个像“给我任何字符的正则表达式,除了'〜'和'〜'之间的'〜'

我无法找到正确使用[^]的方法!

我该怎么做?

提前致谢!

答案:我终于做到了:〜[^〜] {3,}〜

除了'〜'之外的所有内容,包含在两个'〜'之间,并且超过三个字符长。

感谢您的回答!

3 个答案:

答案 0 :(得分:4)

如果您不介意从开始和结束可能的额外批次,它应该像以下一样简单:

[^~]{3,}

或者,你可以分开并选择长篇:

var tokens = str.Split('~').Where(s => s.Length >= 3);

如果您确实希望将字符限制为特定集,则可以使用前瞻和后面来确保。这不会消耗波形符号,因此您可以获得~123~abc~的两个匹配项(如果您对此感到满意,也可以使用[^~]):

(?<=~)[\w\d\s]{3,}(?=~)

答案 1 :(得分:2)

试试这个正则表达式(?:~([^~]{3,})~)
它将匹配两个~~(不会捕捉〜)

之间的永恒

答案 2 :(得分:0)

类似的东西:

~([^~]{3}[^~]+)~

(测试)