拆分字符串保持分隔符没有开始 space

Split string keeping the separator without a starting space

你好,我想使用 python re module:

拆分一些字符串
str1 = "-t Hello World -a New Developr -d A description"
str2 = "-t Bye -a sometext -d a large description"

我必须保留 -,因为我目前正在编写 python CLI 项目。 我试过使用

re.split(r'(?=-)',aux)

但我收到了

['', '-t Hello World  ', '-a Author ', '-d Description ']

而不是

['-t Hello World', '-a Author', '-d Description']

有什么推荐吗?

尝试对结果应用 strip() 方法。

foo = re.split(r'(?=-)',str1)
foo = [s.strip() for s in foo]

使用负后视来避免在字符串的开头拆分:(?<!^)

然后剥离每个结果字符串。

for s in str1, str2:
    print([x.strip() for x in re.split(r'(?<!^)(?=\s+-)', str1)])

(我还添加了 \s+ 以避免拆分像 Spider-Man 这样的单词。)

输出:

['-t Hello World', '-a New Developr', '-d A description']
['-t Hello World', '-a New Developr', '-d A description']

但是,我建议您查看可以为您执行此操作的库 - 也许 argparseshlex 开始,我会质疑这些字符串的来源,因为通常您在解析之前将命令行参数作为列表处理,如下所示:

['-t', 'Hello', 'World', '-a', 'New', 'Developr', '-d', 'A', 'description']