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})*[^#]*$)