0

我正在编写一个正则表达式匹配程序,我无法使用以空格开头的正则表达式。

有没有办法告诉 OptParse 只用第一个空格分隔?

4

3 回答 3

3

不,因为外壳会删除这些空格,而不是 optparse。Python 会收到一个已解析的命令行参数列表。

使用引号保留空格:

./yourscript.py --option=" spaces in here "

为了演示,我创建了以下脚本:

#!/usr/bin/env python
import sys
print sys.argv

向您展示 optparse 看到的内容:

$ ./demo.py     foo bar baz
['./demo.py', 'foo', 'bar', 'baz']

请注意空格是如何全部删除的,三个值是如何传递给脚本的。但是引用:

$ ./demo.py "    foo bar" baz
['./demo.py', '    foo bar', 'baz']

空白被保留,我也将两个字符串合二为一。

于 2013-05-16T13:52:54.220 回答
1

您的问题缺乏有效回答的大量数据,但以下内容可能会有所帮助:

如果您无法使用以空格开头的正则表达式,请尝试使用表示空格的替换字符:\s.. 所以\s{3}test将匹配“<3 个空格>test”。

如果它是 shell 脚本,请记住双重转义它,否则 shell 将忽略sin \s。所以正确的版本将是\\s{3}test

于 2013-05-16T13:53:11.177 回答
0

命令行在参数到达您的 Python 程序之前对其进行拆分。根据您的外壳,您可能想要使用"'封装您的正则表达式。例如,在 Bash 中,双引号将启用对字符的 shell 扩展$`这可能会导致错误。

./match.py --pattern=" something (.*)"
于 2013-05-16T13:57:04.300 回答