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

标签 c# regex regex-negation

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

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

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

这是一个简单的文本

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

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

相反,我更愿意创建一个正则表达式,例如 “给我任何字符,但包含在‘~’和‘~’之间的‘~’除外”

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

我该怎么做?

提前致谢!

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

它包含除“~”之外的所有内容,包含在两个“~”之间并且长度超过三个字符。

感谢您的回答!

最佳答案

如果您不介意从开始到结束可能有额外的批处理,它应该很简单:

[^~]{3,}

或者,您可以拆分并取长的:

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

如果你确实想将字符限制在一个特定的集合中,你可以使用先行和后行来确保。这不会消耗波浪号,所以你会得到两个 ~123~abc~ 的匹配项(同样,你可以使用 [^~] 如果你对它感到满意):

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

关于c# - 正则表达式 - 避免字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4332807/

相关文章:

python - 如何使用正则表达式查找匹配词?

python - 用于替换不在引号之间的特定单词的正则表达式

c# - 如何将类从 C++ 代码返回到 C#

c# - 如何返回多个类的对象?

javascript - 仅允许使用正则表达式和字符串替换在 HTML/Javascript 中输入 1-12 和 00-59

javascript - 从此正则表达式中排除特定数字

regex - 正则表达式匹配电话号码?

c# - .NET Core 控制台应用程序的 ASP.NET Core 配置

c# - 如何在 C# 中拖动和移动形状

sql - 如何用 • 替换单词但仅显示第一个和最后一个字符