C# 用于分析的正则表达式::number::句子::

C# 用于分析的正则表达式::number::句子::,c#,.net,regex,C#,.net,Regex,验证(::number::句::)这样的值的正则表达式是什么样子的 ::1::some text:: ::2::some text's:: ::234::some's text's:: 如果你的字符串像这样简单,你可以完全避免使用正则表达式 var data = "::234::some's text's::".Split(new string[] { "::" }, StringSplitOptions.RemoveEmptyEntries); Console.WriteLine(data[

验证(
::number::句::
)这样的值的正则表达式是什么样子的

::1::some text::
::2::some text's::
::234::some's text's::
如果你的字符串像这样简单,你可以完全避免使用正则表达式

var data = "::234::some's text's::".Split(new string[] { "::" }, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(data[0]); // 234
Console.WriteLine(data[1]); // some's text's
如果您需要使用它进行验证,您仍然可以使用与上面相同的逻辑,例如

public bool Validate(string str)
{
    var data = str.Split(new string[] { "::" }, StringSplitOptions.RemoveEmptyEntries);
    double n;
    return data.Length == 2 && Double.TryParse(data[0], out n) && !String.IsNullOrWhiteSpace(data[1]);
}
...
bool valid = Validate("::234::some's text's::");
比如:

^::([0-9]+)::((?:(?!::).)*)::$
示例代码:

Match match = Regex.Match("::1::some text::", "::([0-9]+)::((?:(?!::).)*)::");
var groups = match.Groups;
string num = groups[1].ToString();
string text = groups[2].ToString();
说明:

^ Begin of the string
:: 2x ':'
([0-9]+) Match group 1, the 0-9 digits, one or more
:: 2x ':'
((?:(?!::).)*) Match group 2, any one character that isn't ::, zero or more
:: 2x ':'
$ End of the string
((?:(?!:))*)
需要更多的解释。。。让我们把它剥开

( ... ) the first '(' and last ')', match group 2
现在我们有:

(?:(?!::).)*
所以

由以下部分组成:

(?!::). 
在哪里


但是在“捕获”任何字符之前,请检查:
(?!::)
任何字符和下一个字符都不是
(称为零宽度负前瞻)

您想要提取什么,您尝试了什么?正则表达式是必需的吗?我打赌不是。不要使用正则表达式。这里没有必要。我不需要提取,但需要验证字符串是否有指定的formate+1,以停止重新记录所有内容+1,因为您希望他过上幸福平淡的生活。。。还我会删除RemoveEmptyEntries,这样更容易检查输入的正确性(如果您这样做,请记住增加两个“部分”的索引)@xanatos我想这取决于这里真正重要的内容,数据的格式或数据本身。在我的示例中,我只是提取数据并按照预期的顺序对其进行验证。注意:
条件?一些bool:false
可以重写为
(条件)和&(一些bool)
@Nuffin-ah不错的改进,代码越少越好-更新。
(?!::). 
. is any character