Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式-避免字符_C#_Regex_Regex Negation - Fatal编程技术网

C# 正则表达式-避免字符

C# 正则表达式-避免字符,c#,regex,regex-negation,C#,Regex,Regex Negation,在C#中使用一些正则表达式时,我面临以下问题: 考虑这个简单的字符串:~0~这是一个简单的文本~POP~NIZ~0~0~ 我想选择两个“~”之间的任何字符串,其中包含超过3个字符,当然“~”除外。在我的例子中,问题是: 这是一个简单的文本 我可以做这样的东西:([\w][\d].[\124;,…){4-500} 我会以一个很长的正则表达式结束,无法调试,也不可读 相反,我更喜欢创建一个正则表达式,比如“给我任何字符,除了包含在“~”和“~”之间的“~” 我找不到正确使用[^]的方法 我该怎么做

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

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

我想选择两个“~”之间的任何字符串,其中包含超过3个字符,当然“~”除外。在我的例子中,问题是:

这是一个简单的文本

我可以做这样的东西:([\w][\d].[\124;,…){4-500}

我会以一个很长的正则表达式结束,无法调试,也不可读

相反,我更喜欢创建一个正则表达式,比如“给我任何字符,除了包含在“~”和“~”之间的“~”

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

我该怎么做

提前谢谢

回答:我终于做到了:~[^~]{3,}~

除了包含在两个“~”之间的“~”之外,它需要所有东西,长度超过三个字符。


谢谢你的回答

如果您不介意从开始到结束都有一个可能的额外批次,那么应该尽可能简单:

[^~]{3,}
或者,您也可以拆分并取长的:

var tokens = str.Split('~').Where(s => s.Length >= 3);
如果要将字符限制在特定的集合中,可以使用“向前看”和“向后看”来确保。这不会消耗波浪符号,因此您将获得两个匹配的
~123~abc~
(同样,如果您对它感到满意,您可以使用
[^~]
):

(?试试这个正则表达式
(?:([^~]{3,})~)

它将匹配两个对象之间的所有对象~~~(不会捕捉)

类似于:

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

(已测试)

将整个匹配包在
(?:)
中所做的工作很少-语义上完全相同。感谢您的回答!Kobi是对的,您的工作正常,但(?:)似乎没用?你为什么这么说?如果我去掉?:il将捕获2个块'1.~123~和2.123',所以我把?:并使第一个块'non-capturable',无论哪种方式,你都应该得到与
Value=~123~
组[1]的
匹配
是两种情况下的全部匹配项。
~[^~]{3,}~
可能是错误的-那么
~1234~acbd~
呢?您需要两种匹配项吗?您是对的,但我完成了正则表达式以避免这些数字!但是出于示例目的,是的,我不介意这些数字!谢谢您的评论!
~([^~]{3}[^~]+)~