Code Bye

求正则表达式判断一个字符串是否同时含有[]

正则表达式判断一个字符串是否同时含有[]


20分
(.*\[.*\].*)|(.*\].*\[.*)
谢谢兄弟,就是还有个问题想请教下你,比如有一个字符串“又到吃饭时间了[微笑]我们去吃饭吧,好不好?ok123”想把它分成“又到吃饭时间了”、“[微笑]”、“我们去吃饭吧,好不好?”、“123”,该怎么写正则表达式
比如有一个字符串“又到吃饭时间了[微笑]我们去吃饭吧,好不好?ok123”想把它分成“又到吃饭时间了”、“[微笑]”、“我们去吃饭吧,好不好?”、“ok”、“123”,该怎么写正则表达式
引用 3 楼 u012012237 的回复:

比如有一个字符串“又到吃饭时间了[微笑]我们去吃饭吧,好不好?ok123”想把它分成“又到吃饭时间了”、“[微笑]”、“我们去吃饭吧,好不好?”、“ok”、“123”,该怎么写正则表达式

没看出来规则是什么?

static void RegexSplit()
        {
            string txt = @"又到吃饭时间了[微笑]我们去吃饭吧,好不好?ok123";
            var arr = Regex.Split(txt, @"(\b(?=\[)|(?<=\])\b)|((?<=[,?])\b)");
            foreach (var str in arr)
            {
                Console.WriteLine(str);
            }
        }

ok123不分了

引用 7 楼 starfd 的回复:
static void RegexSplit()
        {
            string txt = @"又到吃饭时间了[微笑]我们去吃饭吧,好不好?ok123";
            var arr = Regex.Split(txt, @"(\b(?=\[)|(?<=\])\b)|((?<=[,?])\b)");
            foreach (var str in arr)
            {
                Console.WriteLine(str);
            }
        }

ok123不分了

我自己在否面加了把字母和数字分开的表达式(\b(?=\[)|(?<=\])\b)|(?=[1-9]d*$\b)|(?=[a-zA-Z]),但是效果不太对

引用 8 楼 u012012237 的回复:
Quote: 引用 7 楼 starfd 的回复:
static void RegexSplit()
        {
            string txt = @"又到吃饭时间了[微笑]我们去吃饭吧,好不好?ok123";
            var arr = Regex.Split(txt, @"(\b(?=\[)|(?<=\])\b)|((?<=[,?])\b)");
            foreach (var str in arr)
            {
                Console.WriteLine(str);
            }
        }

ok123不分了

我自己在否面加了把字母和数字分开的表达式(\b(?=\[)|(?<=\])\b)|(?=[1-9]d*$\b)|(?=[a-zA-Z]),但是效果不太对

 txt = @”[微笑]又到123吃饭时间了ok[微笑]我们去吃饭吧,好不好?ok123″想把中文、英文、数字、还有含有[]都分别分开的

static void RegexSplit()
        {
            string txt = @"又到吃饭时间了[微笑]我们去吃饭吧,好不好?ok123";
            var arr = Regex.Split(txt, @"(?=\[)|(?<=\])|(?<=[,?])|(?<=[a-zA-Z])(?=\d)");
            foreach (var str in arr)
            {
                Console.WriteLine(str);
            }
        }

这已经是完全按你字符串定制了……

引用 10 楼 starfd 的回复:
static void RegexSplit()
        {
            string txt = @"又到吃饭时间了[微笑]我们去吃饭吧,好不好?ok123";
            var arr = Regex.Split(txt, @"(?=\[)|(?<=\])|(?<=[,?])|(?<=[a-zA-Z])(?=\d)");
            foreach (var str in arr)
            {
                Console.WriteLine(str);
            }
        }

这已经是完全按你字符串定制了……

嗯嗯,非常感谢大神的帮助,把中文、英文、数字、还有含有[]混排的字符串都分别按照中文、英文、数字、还有含有[]分开的应该怎样做呢?eg:”[微笑]又到123吃饭时间了ok[微笑]123我们去吃饭吧,好不好?ok123″

按中文,数字,英文还好办,其它的没办法……
[a-zA-Z]+|\d+|[\u4e00-\u9fa5]+

其它的符号不知道你想干嘛了 

引用 11 楼 u012012237 的回复:
Quote: 引用 10 楼 starfd 的回复:
static void RegexSplit()
        {
            string txt = @"又到吃饭时间了[微笑]我们去吃饭吧,好不好?ok123";
            var arr = Regex.Split(txt, @"(?=\[)|(?<=\])|(?<=[,?])|(?<=[a-zA-Z])(?=\d)");
            foreach (var str in arr)
            {
                Console.WriteLine(str);
            }
        }

这已经是完全按你字符串定制了……

嗯嗯,非常感谢大神的帮助,把中文、英文、数字、还有含有[]混排的字符串都分别按照中文、英文、数字、还有含有[]分开的应该怎样做呢?eg:”[微笑]又到123吃饭时间了ok[微笑]123我们去吃饭吧,好不好?ok123″

分开成:分开成为“[微笑]“、”又到“、“123”、”吃饭时间了“、”ok“、”[微笑]“、”123“、”我们去吃饭吧,好不好?“、”ok“、123”                 


20分
            string s = @"[微笑]又到123吃饭时间了ok[微笑]123我们去吃饭吧,好不好?ok123";
            MatchCollection match = Regex.Matches(s, @"\[.*?\]|[a-zA-Z]+|[0-9]+|[\u4e00-\u9fa5].*?(?=[a-zA-Z0-9|\[])");
            foreach (Match m in match)
            {
                Console.WriteLine(m.Value);
            }

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求正则表达式判断一个字符串是否同时含有[]