regex C#正则表达式使用空格拆分,但不包括[:和:]特殊字符

mtb9vblg  于 2023-02-17  发布在  C#
关注(0)|答案(2)|浏览(204)

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

    • 示例:第一种情况:**
string input1 = "one [two two] three [:four four:] five six [seven seven:] [:eight eight]";
    • 输出:**
one
[two
two]
three
[:four four:]
five
six
[seven
seven:]
[:eight
eight]
    • 示例:第二种情况:**
    • 输出:**
one
[two two]
three
[:four four:]
five
six
[seven
seven:]
[:eight
eight]

我试过了,但不起作用,输出低于
一个三个三个一个

vi4fp9gy

vi4fp9gy1#

您可以使用

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

请参见regex demo

  • 详细信息 *:
  • \[:-[:字符串
  • [^][]*-[]之外的零个或多个字符
  • :]
  • |-或
  • \[-一个[字符
  • (?!:)-紧靠右侧,不应有:
  • [^][]*-除[]之外的零个或多个字符
  • (?<!:)]-前面没有:]字符
  • |-或
  • \S+-一个或多个非空白字符。
o7jaxewo

o7jaxewo2#

我想你输入的大小写可能不对,应该是string input1 = "one [two two] three [:four four:] five six [:seven seven:] [:eight eight:]";
你可以用这个正则表达式得到你想要的数组:
var parts1 = Regex.Replace(input1, @"\[\:[a-z ]+\:\] *|\[[a-z ]+\] *", "").Trim().Split(' ');

相关问题