3

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

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

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

这是一个简单的文字

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

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

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

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

我怎样才能做到这一点 ?

提前致谢 !

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

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

感谢您的回答!

4

3 回答 3

4

如果您不介意从头到尾可能有额外的批次,它应该很简单:

[^~]{3,}

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

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

如果您确实想将字符限制为特定的集合,您可以使用前瞻和后向来确保。这不会消耗波浪号,因此您可以获得两个匹配项~123~abc~(同样,[^~]如果您对它感到满意,您可以使用它):

(?<=~)[\w\d\s]{3,}(?=~)
于 2010-12-02T07:50:59.627 回答
2

试试这个正则表达式(?:~([^~]{3,})~)
它会匹配两个之间的一切~~(不会抓住〜)

于 2010-12-02T07:52:06.803 回答
0

就像是:

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

(已测试)

于 2010-12-02T07:52:13.743 回答