Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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#_.net_Regex_Regex Negation_Regex Lookarounds - Fatal编程技术网

C# 从逗号分隔的数字列表中删除数字

C# 从逗号分隔的数字列表中删除数字,c#,.net,regex,regex-negation,regex-lookarounds,C#,.net,Regex,Regex Negation,Regex Lookarounds,我有一个数字列表,如下所示: [123,45,6,78,9] [45] [45,123,456] [1234,45] [] [123,4,67,8,9] 假设我想删除number45以尽可能少的回溯来删除,我编写了以下正则表达式: (\[)((?=\])|(45(?=\])|45,|(?>([^,]|,(?!45(?:,|\])))))([^\]\]) 此正则表达式适用于除最后一种情况外的所有情况,如有任何帮助,将不胜感激。正则表达式: (?<!\[),45\b|(?<=\

我有一个数字列表,如下所示:

[123,45,6,78,9]
[45]
[45,123,456]
[1234,45]
[]
[123,4,67,8,9]
假设我想删除number
45
以尽可能少的回溯来删除,我编写了以下正则表达式:

(\[)((?=\])|(45(?=\])|45,|(?>([^,]|,(?!45(?:,|\])))))([^\]\])
此正则表达式适用于除最后一种情况外的所有情况,如有任何帮助,将不胜感激。

正则表达式:

(?<!\[),45\b|(?<=\[)45,|(?<=\[)45(?=\])

它从逗号分隔的字符串中删除数字45

C#代码应该是

string str = @"[123,45,6,78,9]
[45]
[45,123,456]
[1234,45]
[]
[123,4,67,8,9]";
string result = Regex.Replace(str, @"(?<!\[),45\b|(?<=\[)45,|(?<=\[)45(?=\])", "");
Console.WriteLine(result);
Console.ReadLine();
}
string str=@“[123,45,6,78,9]
[45]
[45,123,456]
[1234,45]
[]
[123,4,67,8,9]";
字符串结果=Regex.Replace(str,@“(?Regex:

它从逗号分隔的字符串中删除数字45

C#代码应该是

string str = @"[123,45,6,78,9]
[45]
[45,123,456]
[1234,45]
[]
[123,4,67,8,9]";
string result = Regex.Replace(str, @"(?<!\[),45\b|(?<=\[)45,|(?<=\[)45(?=\])", "");
Console.WriteLine(result);
Console.ReadLine();
}
string str=@“[123,45,6,78,9]
[45]
[45,123,456]
[1234,45]
[]
[123,4,67,8,9]";
string result=Regex.Replace(str,@)(?使用以下命令:

(?<=\[)45,?|,?\b45\b
(?使用此选项:

(?<=\[)45,?|,?\b45\b

(?我以为@JleruOHeP会给出一个答案,但我相信回溯最少的正则表达式就是他使用的正则表达式,稍微调整一下,使其更无回溯:

@"\b(?:,45|45,?)\b"
对于您的测试用例,上述步骤分别需要16、44、16和46个步骤,如调试器上所示(您需要单击左窗格上的“regex debugger”以查看每个匹配的步骤数)


回溯较低的原因是上面没有使用lookarounds,这会增加一些开销。

我认为@jlerouhep会给出一个答案,但我相信回溯最少的正则表达式就是他使用的正则表达式,稍加调整,使其更无回溯:

@"\b(?:,45|45,?)\b"
对于您的测试用例,上述步骤分别需要16、44、16和46个步骤,如调试器上所示(您需要单击左窗格上的“regex debugger”以查看每个匹配的步骤数)



较低回溯的原因是上面没有使用lookarounds,这会增加一些开销。

最后一种情况是什么意思?预期的输出是什么?正则表达式无效-有一些未闭合的括号和括号-你能检查一下吗?你必须考虑可能存在
45 s在方括号之外,并且正则表达式不能与之匹配?如果您不关心方括号,那么最简单的方法是:
regex.Replace(str,“\\b(45,| 45 |,45)\\b”,”)最后一个例子是什么意思?预期的输出是什么?正则表达式是无效的-有一些未闭合的括号和方括号-你能检查一下吗?你必须考虑到可能有
45
在方括号之外,并且正则表达式不能匹配这些吗?如果你不关心方括号的话en最简单的方法是:
Regex.Replace(str,\\b(45,| 45 |,45)\\b“,”)
如您的演示所示,它无法从
[45]
中删除
45
。如您的演示所示,它无法从
[45]
中删除
45
。空的大小写是什么
或者不包含
45
的情况?@babbupandey:那么正则表达式什么都不做。为什么不测试它呢?他甚至提供了一个测试链接……我接受了它作为答案,尽管@AvinashRaj的答案也是正确的,这是一个简洁的答案:)谢谢你们的帮助,你们很棒!!空的情况怎么样
[]
或者不包含
45
的情况?@babbupandey:那么正则表达式什么都不做。你为什么不测试它呢?他甚至提供了一个测试链接……我接受它作为答案,尽管@AvinashRaj的答案也是正确的,这是一个简洁的答案:)谢谢你们的帮助,你们太棒了!!哇!!谢谢Jerry@babbupandey我的荣幸:)哦,哇!!谢谢Jerry@babbupandey我的荣幸:)