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)(?=\))