我正在使用python来解析由optparse模块传入的字符串。 我想在某些分隔符上拆分字符串,但不在引号之间。 示例字符串是:
--state-basedir /dir/dir/dir/ --cmd=\"param load $v2param\" --master=/dev/ttyUSB0 --console --map --out=udp:192.168.1.1:14550
这个字符串作为单个optparse参数传入,然后我将它传递给另一个进程。 我一直在http://pythex.org/尝试各种各样的事情 我得到的最接近的是:
`(?<!")[\s=](?![\s0-9a-zA-Z\$\\]*")`
问题是=
之后的--cmd
符号与--master
之前的空格不匹配。
用简单的英语,这就是我正在阅读我的正则表达式:
匹配空格字符或相同字符,只要它不带引号,并且只要它不是由任何其他字母,数字,标点和的组合继续进行的另一个引号
我有一种感觉,那就是我缺少的其他东西,比如贪婪,所以我尝试在我的前瞻和后视条件之后添加?
。如果我在?
之后放置--master
,我可以在?
之前获得空格,但如果我在我的预测期后放Scanner input = new Scanner(System.in);
int a = 0;
while (true) {
System.out.print("enter a number: ");
if (!input.hasNextInt() || !input.hasNext() || (a < 1 || a > 3)) {
System.out.println("Oops! ");
input.nextLine();
}
else {
a = input.nextInt();
break;
}
}
input.close();
System.out.println("a = " + a);
}
,我会在引号中找到空格现在,我不想要。
这里的想法是我将使用re.split来处理事情。
感谢您对我做错的任何解释。
答案 0 :(得分:0)
这不是一个正则表达式的答案,它也不漂亮,但它只有一行。
sum([[x] if '"' in x else re.split(' |=',x) for x in re.split('=(\".+?\" )',a)],[])
输出:
['--state-basedir', '/dir/dir/dir/', '--cmd', '"param load $v2param" ', '--master', '/dev/ttyUSB0', '--console', '--map', '--out', 'udp:192.168.1.1:14550']
从re.split('=(\".+?\" )',a)]
开始,这会拆分引号括起来的文字(更具体地说是="something another thing"
)。然后,如果分割的片段中没有re.split(' |=',x)
,则会使用"
进一步拆分,或者如果他们这样做,则按[x]
返回。最后一步是通过使用sum
重载sum(two_d_list,[])
来折叠生成的二维列表。
我希望这个答案有所帮助但我明白这不是你想要的