python - 用于解析像字符串这样的 shell 命令的正则表达式

标签 python regex

我正在尝试解析看起来像 shell 命令的字符串。这些命令的一般结构如下:

command value -arg1name arg1val -arg2name arg2val ... -argMname argMval

这是一个例子,

abc cmdh1521 -x 123 -y sadg -zzz 563sd

我正在使用 Python re 模块来解析、搜索和分组字符串,以便获得这样的输出,

(command, value, ((-arg1name, arg1val), (arg2name, arg2val), ... (argMname, argMval))

我尝试了以下一组命令,但我的输出不是我想要的。

import re
cmd = "abc cmdh1521 -x 123 -y sadg -zzz 563sd"
_parser = r"^([a-z]+)\s{1}(\S*)((\s+\-[a-z]+\s{1}\S+)*)"
out = re.search(_parser, cmd)
print out.groups()

这是我得到的输出

('abc', 'cmdh1521', ' -x 123 -y sadg -zzz 563sd', ' -zzz 563sd')

我做错了什么?

我可以轻松实现非正则表达式解决方案,但我想知道是否有正则表达式可以提供我想要的解析类型?

最佳答案

在这种情况下,您将不得不使用正向后视正则表达式,如下所示:

(?<=-)(\w+) ([\w\d]+) 

说明和示例位于: Demo

关于python - 用于解析像字符串这样的 shell 命令的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35647763/

相关文章:

python - 如何知道我使用的是哪个版本的 pandas-profiling?

python - Django 预填充+附加固定字符串

python 数据类作为 oop 抽象

python - 正则表达式比使用 .replace() 更快吗

java - 如何创建一个模式来查找 *.ABS 序列?

python - sqlalchemy+sqlite 去除带点的列名?

python - 属性错误 : 'function' object has no attribute 'upper'

regex - 如何在一个正则表达式对象中使用多种模式?

java - 在文件的每一行中查找有效模式

regex - 正则表达式用链接替换单词