Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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#_Regex_Token - Fatal编程技术网

C# 什么是正确的正则表达式?

C# 什么是正确的正则表达式?,c#,regex,token,C#,Regex,Token,我有这样一个文本: (0.2 furry (0.81 fast (0.3) (0.2) ) (0.1 fishy (0.3 freshwater (0.01) (0.01) ) (0.1) ) ) 我想使用Regex.split拆分它。我希望字符串[]的格式为: ( 0.2 毛茸茸的 ( 0.81 快速的 ( 0.3 ) ( 0.2 ) ) ( …(你明白了) 我使用的是正则表达式([()\\s]),但这也为空格提

我有这样一个文本:

(0.2 furry
  (0.81 fast
    (0.3)
    (0.2)
  )
  (0.1 fishy
    (0.3 freshwater
      (0.01)
      (0.01)
    )
    (0.1)
  )
)
我想使用
Regex.split
拆分它。我希望字符串[]的格式为:

(
0.2
毛茸茸的
(
0.81
快速的
(
0.3
)
(
0.2
)
)
(
…
(你明白了)


我使用的是正则表达式
([()\\s])
,但这也为空格提供了字符串。您能告诉我正确的正则表达式吗?

可能是类似于

[)(]|\d+\.\d+|\w+
可能只是工作正常:

测验
如果您希望简化/修改/探索表达式,已在的右上面板中进行了说明。如果您愿意,还可以在中查看它如何与一些示例输入匹配


正则表达式电路 可视化正则表达式:

您可以匹配(正如其他人所回答的)或拆分空格和括号:

请注意,为了在上面的链接中显示,我将匹配项替换为
\n

您可以在下面的模式中进行拆分

\s+|(?
此模式由3个选项组成:

  • \s+
    将任何空白字符匹配一次或多次
  • (?)

  • 你想用空格分割吗?看起来像是S-expressionAre你想把这个输入解析成一个C#object吗?@有人我的delimeters是'(',')和空格,但我不想在分割中保留任何空格。@aloisdg不,只是Regex.Spilt创建的字符串[]我还没有测试你的正则表达式,但我相信我的(
    [()].[^\S()]+
    )更简单。@someone是的,在减少步骤方面做得更好。为什么不为OP创建一个答案呢?@NickDelta TBH,这个解决方案比这里列出的其他解决方案执行的步骤要多,包括@某人的评论。另外,你介意分享你的结论吗?为什么
    这正是我想要的
    ?另一个答案对你不起作用吗,你是如何衡量绩效的等等?@đěxě341;他的原始问题是使用
    Regex.split
    。虽然它可能不如其他答案的性能,但它确实以OP预期的方式完成了任务。我同意,可能有更好的替代方案,但这就是拆分OP我同意,但你和/或OP确实知道,
    Regex.Split
    在引擎盖下最终将所有在
    Matches
    中搅动的工作委托给了他们,并将他们添加到了一个新的列表中。老实说,他们已经将其打包成一个小数组为你吐出了匹配项只要OP得到他们需要的结果,这并不重要。@đěxě341;是的,但这可能是一项专门分配给OP的任务,据我们所知,数据可能与提议的其他匹配格式不一致
    \d+.\d+
    -例如负数、科学符号
    e-5
    、分数
    3/4
    等。
    using System;
    using System.Text.RegularExpressions;
    
    public class Example
    {
        public static void Main()
        {
            string pattern = @"[)(]|\d+\.\d+|\w+";
            string input = @"(0.2 furry
              (0.81 fast
                (0.3)
                (0.2)
              )
              (0.1 fishy
                (0.3 freshwater
                  (0.01)
                  (0.01)
                )
                (0.1)
              )
            )";
            RegexOptions options = RegexOptions.Multiline;
    
            foreach (Match m in Regex.Matches(input, pattern, options))
            {
                Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
            }
        }
    }
    
    \s+|(?<=\()(?!\s)|(?<!\s)(?=\))