我正在编写一个正则表达式匹配程序,我无法使用以空格开头的正则表达式。
有没有办法告诉 OptParse 只用第一个空格分隔?
不,因为外壳会删除这些空格,而不是 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']
空白被保留,我也将两个字符串合二为一。
您的问题缺乏有效回答的大量数据,但以下内容可能会有所帮助:
如果您无法使用以空格开头的正则表达式,请尝试使用表示空格的替换字符:\s
.. 所以\s{3}test
将匹配“<3 个空格>test”。
如果它是 shell 脚本,请记住双重转义它,否则 shell 将忽略s
in \s
。所以正确的版本将是\\s{3}test
命令行在参数到达您的 Python 程序之前对其进行拆分。根据您的外壳,您可能想要使用"
或'
封装您的正则表达式。例如,在 Bash 中,双引号将启用对字符的 shell 扩展$
,`
这可能会导致错误。
./match.py --pattern=" something (.*)"