C# 正则表达式按空格将字符串拆分为单词,并包含字符

C# 正则表达式按空格将字符串拆分为单词,并包含字符,c#,regex,C#,Regex,如何使用Regex.split(输入,模式)方法执行此拆分 This is a [normal string ] made up of # different types # of characters 字符串数组输出: 1. This 2. is 3. a 4. [normal string ] 5. made 6. up 7. of 8. # different types # 9. of 10. characters 它还应该保留前导空格,所以我想保留所有内容。一个字符串包含20个字

如何使用
Regex.split(输入,模式)
方法执行此拆分

This is a [normal string ] made up of # different types # of characters
字符串数组输出:

1. This 
2. is
3. a
4. [normal string ]
5. made
6. up
7. of
8. # different types #
9. of
10. characters
它还应该保留前导空格,所以我想保留所有内容。一个字符串包含20个字符,字符串数组在所有元素中应总共包含20个字符

我所尝试的:

Regex.Split(text, @"(?<=[ ]|# #)")

Regex.Split(text, @"(?<=[ ])(?<=# #")
Regex.Split(text,@)(?我建议匹配,即提取单词,而不是拆分:

你可以用

var res = Regex.Split(s, @"(\[[^][]*]|#[^#]*#)|\s+")
    .Where(x => !string.IsNullOrEmpty(x));

(\[^][*]|#[^#]*.
部分是一个捕获组,其值与拆分的项目一起输出到结果列表

图案细节

  • (\[^][*]|#[^#]*.)
    -第1组:两种模式之一:
    • \[[^][]*]
      -
      [
      ,后跟0+字符,而不是
      [
      ]
      ,然后是
      ]
    • #[^#]*.
      -a
      #
      ,然后是除
      #
      之外的0+字符,然后是
      #
  • |
    -或
  • \s+
    -1+空格
:

结果:

This
is
a
[normal string ]
made
up
of
# different types #
of
characters

使用匹配方法会更容易,但是使用负面外观:

[ ](?![^\]\[]*\])(?![^#]*\#([^#]*\#{2})*[^#]*$)
匹配不后跟的空格

  • [
    ]
    后接
    ]
  • #
    后跟偶数的
    #

如果存在未配对的特殊字符怎么办?如何拆分“此[字符串”?我不知道这是否能解决您的问题,但您的两个示例的问题是,在第一个
[]|#
中,只有
]|#
上的or才进行拆分,而第二个示例则在彼此之后进行拆分。还有
[
是一个特殊字符。您正在查找类似于
(?)的内容?
var s = "This is a [normal string ] made up of # different types # of characters";
var results = Regex.Split(s, @"(\[[^][]*]|#[^#]*#)|\s+")
    .Where(x => !string.IsNullOrEmpty(x));
Console.WriteLine(string.Join("\n", results));
This
is
a
[normal string ]
made
up
of
# different types #
of
characters
[ ](?![^\]\[]*\])(?![^#]*\#([^#]*\#{2})*[^#]*$)