2010-12-02 74 views
3

在使用C#中的一些正则表达式,我面临着以下问题:正则表达式 - 避免字符

考虑这个简单的字符串:〜0〜这是一个简单的文本〜噗〜NIZ〜0〜0〜

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

这是一个简单的文本

我能做出这样的:([\ w] | [\ d] | | \ ........ .........){} 4-500

我会用很长的正则表达式,不可能调试和不可读结束......

相反,我会希望创建一个正则表达式如“给我任何字符,除了'〜'之间包含'〜'和'〜'”

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

我该怎么做?

在此先感谢!

答:我终于做到了这一点:〜[^〜] {3}〜

它需要的一切,但 '〜',包含两者之间 '〜',这是三年多字符很长。

感谢您的回答!

+0

`〜[^〜] {3,}〜`可能是错的 - 那么'〜1234〜acbd〜'呢?你需要两场比赛吗? – Kobi 2010-12-02 08:02:36

+0

你是对的,但我完成了我的正则表达式来避免这些数字!但是为了举例的目的,是的,我不介意那些数字!谢谢你的评论 ! – 2010-12-02 08:58:35

回答

4

如果你不介意的开始和结束一个可能的额外批次,它应该是那么容易,因为:

[^~]{3,} 

或者,你可以分割,并采取长期的:

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

如果您希望将字符限制为特定集合,则可以使用lookahead和behind来确保。这不会消耗波浪的迹象,让你获得两场比赛的~123~abc~(同样,你可以使用[^~]如果你是移动舒服):

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

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

0

是这样的:

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

(测试)