正则表达式 0或双数个相连的字符

正则表达式 0或双数个相连的字符
String input = @"111n!a222\n!a333\\n!a444\\\n!aabcd\\\\n!a123";

用不包含“\”或双数个“\”和“n!a”开头的内容拆分字符串,拆分成以下样式,要怎么写。

/*
111, n!a, 222\n!a333, \\n!a, 444\\\n!aabcd, \\\\n!a, 123
*/

现在只能拆分成这样。

String input = @"111n!a222\n!a333\\n!a444\\\n!aabcd\\\\n!a123";
                       
string pattern = @"(\\*n!a)";

Regex regex = new Regex(pattern);

string[] split = Regex.Split(input, pattern);
Console.WriteLine(String.Join(",", split));

/*
111, n!a, 222, \n!a, 333, \\n!a, 444, \\\n!a, abcd, \\\\n!a, 123
*/

你这个切分提取方式感觉没什么规律啊?这些的方式,即便写出正则,也没什么意义,换个字符串都未必正确

如果用 Python 中,这是杀鸡🐔,用不上re的那把牛刀。字符串方法str.split()就能胜任。

  用 str.split() 还真不行!😂😂😂😂她不支持原字符串 r'' ,您要处理的字符串反斜杠太多,无法搞。🤔还得用 re.split() ——

  • Python 代码
#!/sur/bin/nve python
# coding: utf-8
import re

s = ["111n!a222\n!a333\\n!a444\\\n!aabcd\\\\n!a123"]

ss = ['''111, n!a, 222\n!a333, \\n!a, 444\\\n!aabcd, \\\\n!a, 123''']
print('\n字符串:\n', s)
print('\n拆分目标字符串:\n', ss)

result = [] # 拆分目标列表初值。
s = s[0]

for i in (r'\\\\n!a', r'\\n!a', r'n!a'):
    
    temp = re.split(i, s)
    result += [temp[1]]
    s = temp[0]
    s = s.replace(i, '')

result = result + [temp[0]]
input(f"\n拆分:\n{result[::-1]}") 


  • 代码运行效果截屏图片

    img

我没连接拆分标识字符,您可以自行连接,太刁钻了,这对于我🤣🤣