我正在试图弄清楚如何分割字符串,保留分隔符,除非分隔符后跟一个空格。我似乎大部分都在那里,除了紧跟分隔符的字符与分隔符一起保留。
到目前为止我的内容如下:
>>> s='\nm222 some stuff \n more stuff'
>>> re.split('(\n[^ ])',s)
['', '\nm', '222 some stuff \n more stuff']
我需要的结果是
['', '\n', 'm222 some stuff \n more stuff']
我在这里缺少什么?谢谢你的帮助。
答案 0 :(得分:4)
使用否定前瞻:
>>> s='\nm222 some stuff \n more stuff'
>>> re.split(r'(\n(?! ))', s)
['', '\n', 'm222 some stuff \n more stuff']
您的代码,
re.split('(\n[^ ])',s)
不起作用,因为(\n[^ ])
将“非空格”字符放在与\n
相同的捕获组中,并为您提供\nm
。 (\n(?! ))
避免使用“非空格”字符,将其置于下一个捕获组中,但仍然使用它进行拆分。
您可以在python regex documentation page上了解有关前瞻的更多信息。
答案 1 :(得分:4)
使用\n(?! )
。这是negative lookahead
这将确保\n
后面没有空格
如果您愿意,甚至可以使用\n(?!\s)
。 \s
包含各种空白字符,例如
' '
(单个空格)\t
(标签)\n
(换行符)\r
(回车)答案 2 :(得分:0)
你需要一个先行断言。
re.split('(\n(?=[^ ]))', s)