正则表达式替换除大小写“0”之外的所有花括号

Posted

技术标签:

【中文标题】正则表达式替换除大小写“0”之外的所有花括号【英文标题】:Regex to replace all curly braces except for the case '0'正则表达式替换除大小写“0”之外的所有花括号 【发布时间】:2020-02-05 12:08:15 【问题描述】:

我想验证一个字符串:

它可能包含零到多次出现的0 必须删除所有其他出现的 或 。

所以:'AbCde0 x1' 必须变为 'AbCde0 x1'

我试过这个:

value = Regex.Replace(value, @"(|)+(?!0)", string.Empty);

但这给了我错误:

正则表达式问题:量词(x,y) 什么都没有。

怎么了?

【问题讨论】:

【参考方案1】:

你可以使用

Regex.Replace(text, @"(\0)|[]", "$1")

或者,支持...中的任何ASCII数字,

Regex.Replace(text, @"(\[0-9]+)|[]", "$1")

见regex demo

详情

(\0) - 捕获组 1($1 指替换字符串中的此值):0 子字符串 | - 或 [] -

另一种环视方法是可能的:

Regex.Replace(text, @"(?!0)|(?<!0)", string.Empty)

见another regex demo。这里,(?!0) 匹配 后面没有 0(?&lt;!0) 匹配 前面没有 0

【讨论】:

我最喜欢环视方法。谢谢!【参考方案2】:

您可以使用环视来实现您的目标:\(?!0\)|(?&lt;!\0)\

解释:

\(?!0\) - 匹配 如果它后面没有 0(由于负前瞻)

| - 交替

(?&lt;!\0)\ - 如果前面没有 0,则匹配 (由于负面的后视)

Demo

代码示例:

Regex.Replace("AbCde0 x1", @"(?!0\)|(?<!\0)\", "")

【讨论】:

这个解决方案已经发布在我的回答中。带有详细信息和演示。为什么要重复?

以上是关于正则表达式替换除大小写“0”之外的所有花括号的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式替换除指定字符串之外的所有内容

PHP正则表达式的使用

vim正则表达式

PHP 正则表达式

Java 正则表达式,用于包装除某些给定字符之外的所有内容

正则表达式:匹配除特定模式之外的所有内容