re.split除非在Python中跟随字符一个整数

Mic*_*udl 0 python regex

在下面的示例中,通过Python的re.split()将字符串转换为列表,使用单个空格作为分隔符.如果拆分的以下字符是整数,则不得发生拆分.我尝试的代码对所有元素的第一个字符执行了额外的错误拆分> 1.

哪个正则表达式会生成所需的输出?

概念输入:

inString = "key=string key=integer key=(float float float) key=float"
Run Code Online (Sandbox Code Playgroud)

期望的输出:

outList = ['key=string', 'key=integer', 'key=(float float float)', 'key=float']
Run Code Online (Sandbox Code Playgroud)

试图代码:

outList = re.split("\s([^0-9].*?)", inString)
Run Code Online (Sandbox Code Playgroud)

尝试代码的输出:

['key=abcde', 'k', 'ey=12345', 'k', 'ey=(0.1234 1.2345 2.3456)', 'k', 'ey=0.1234']
Run Code Online (Sandbox Code Playgroud)

Avi*_*Raj 6

您可以尝试以下使用负向前瞻的代码,

>>> import re
>>> s = "key=abc key=123 key=(0.1234 1.2345 2.3456) key=0.1234"
>>> m = re.split(r' (?!\d)', s)
>>> m
['key=abc', 'key=123', 'key=(0.1234 1.2345 2.3456)', 'key=0.1234']
Run Code Online (Sandbox Code Playgroud)

如果你不想根据里面的空格分割输入字符串,你也可以尝试下面的代码(),

>>> import re
>>> s = "key=abc key=123 key=(0.1234 1.2345 2.3456 foo bar) key=0.1234 key=123 key=(foo bar)"
>>> m = re.split(r' (?=[^()]*(?:\([^()]*\)|[^()]*$))', s)
>>> m
['key=abc', 'key=123', 'key=(0.1234 1.2345 2.3456 foo bar)', 'key=0.1234', 'key=123', 'key=(foo bar)']
Run Code Online (Sandbox Code Playgroud)