c# - 正则表达式根据组拆分包含括号的单词
问题描述
我有以下在一个组中考虑的术语。
Create
Set
和Delete
。
对于以下输入
Create(Apple | Banana(Tree) | Mango (Tree) ) | Delete(Guava)|Set(Orange(Tree))
预期的拆分应该如下
Create(Apple | Banana(Tree) | Mango (Tree) )
Delete(Guava)
Set(Orange(Tree))
我可以想出以下没有给出正确拆分的正则表达式。
(Create|Set|Delete)\(.*\)\s*\|
解决方案
如果你使用:
\s*\|\s*(?=\b(?:Create|Set|Delete)\b)
查看在线演示
\s*\|\s*
- 由零个或多个空格包围的文字管道符号(贪婪)。(?=
- 积极的前瞻:\b
- 字边界。(?:
- 打开非捕获组:Create|Set|Delete
- 从字面上匹配这些替代方案中的任何一个。)
- 关闭非捕获组。
\b
- 字边界。)
- 关闭积极的前瞻。
注意:只需根据您自己的尝试添加其他“关联”和“解除关联”作为替代项。
在 C# 代码中:
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\s*\|\s*(?=\b(?:Create|Set|Delete)\b)";
string input = "Create(Apple | Banana(Tree) | Mango (Tree) ) | Delete(Guava)|Set(Orange(Tree))";
string[] result = Regex.Split(input, pattern,
RegexOptions.IgnoreCase,
TimeSpan.FromMilliseconds(500));
for (int ctr = 0; ctr < result.Length; ctr++) {
Console.Write("'{0}'", result[ctr]);
if (ctr < result.Length - 1)
Console.Write(", ");
}
Console.WriteLine();
}
}
输出:
'Create(Apple | Banana(Tree) | Mango (Tree) )', 'Delete(Guava)', 'Set(Orange(Tree))'
在这里试试。
推荐阅读
- angular - 尝试使用对象属性访问文档信息
- javascript - componentDidMount() 中的“这是未定义”错误
- mysql - 从文本列中选择小时
- swift - 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[UIImageView _isResizable]:
- dart - 如何覆盖子类中的类变量?
- c# - Unity HoloLens 应用程序作为 Windows 应用程序而不是 AR 执行
- python - Spyder 和 Jupyter:与错误“TypeError:'list' 对象不能被解释为整数”的区别
- node.js - 如何使用 ngFor 从 Angular 中的数组对象中访问键值
- c# - 如何在 ASP.NET 中创建已在后端 HTML 表和 div 中创建的 onserverclick 事件
- python - 如何在后台调度程序运行时阻止程序崩溃?