我需要两个C#正则表达式来使用空格拆分,但不包括[::]个特殊字符之间的文本.

  1. 需要正则表达式来拆分文本,但不包括[::]个特殊字符之间的文本.
  2. 需要正则表达式来拆分文本,但不包括[::]之间的文本以及[]个特殊字符之间的文本.

Example: 1st Case:

string input1 = "one [two two] three [:four four:] five six [seven seven:] [:eight eight]";

output:个个

one
[two
two]
three
[:four four:]
five
six
[seven
seven:]
[:eight
eight]

Example: 2nd Case:

output:个个

one
[two two]
three
[:four four:]
five
six
[seven
seven:]
[:eight
eight]

我试过了,但不管用,yields 低于yields

string input1 = "one [two two] three [:four four:] five six [seven seven:] [:eight eight]";
var parts1 = Regex.Matches(input1,  @"[[::]].+?[\[::]]|[^ ]+").Cast<Match>()
                        .Select(m => m.Value)
                        .ToArray();
one
[two two] three [:four four:]
five
six
[seven seven:]
[:eight
eight]

推荐答案

您可以使用

var pattern = @"\[:[^][]*:]|\[(?!:)[^][]*(?<!:)]|\S+";
var results = Regex.Matches(text, pattern).Cast<Match>().Select(x => x.Value);

请看regex demo.

Details:

  • \[:-[:字符串
  • [^][]*-[]以外的零个或更多字符
  • :]
  • |-或
  • \[-A [字符
  • (?!:)--就在右边,应该没有:
  • [^][]*-[]以外的零个或更多字符
  • (?<!:)]-前面没有:]个字符
  • |-或
  • \S+-一个或多个非空格字符.

Csharp相关问答推荐

无法解析数据库上下文的服务

链接到字典字符串.拆分为(.Key,.Value)

WPF DataGrid文件名列,允许直接输入文本或通过对话框按键浏览

在使用UserManager时,如何包含与其他实体的关系?

Blazor Server.NET 8中的Blazore.FluentValidation问题

当try 测试具有协变返回类型的抽象属性时,类似功能引发System.ArgumentException

如何正确处置所有动态控件?

未显示详细信息的弹出对话框

C#无法将.csv列转换为用于JSON转换的列表

Foreach非常慢的C#

如何解决System.StackOverflowException:抛出System.StackOverflowException类型的异常.&# 39;生成随机代码时发生异常?

如何阻止可传递依赖项出现在项目中

.NET8支持Vector512,但为什么向量不能达到512位?

C#:我需要根据换行符拆分字符串,而不是在字符串中用双引号分隔换行符

PowerShell:如何[引用]数组中的元素?

Serilog:如何编写只有一个级别的文件

如何在C#中加载证书包?

如果泛型类型具有这些运算符,如何重载泛型类上的运算符?

获取列表<>;

基于WPF列表的控件是否支持双向绑定Realm dotnet实时查询?