包含RegEx的Python shlex拆分选项



假设我想给出这个命令./maryam -e crawl_pages -d domain.tld -r "a href=".*"并将其拆分。

当我运行时

>>>line = './maryam -e crawl_pages -d domain.tld -r "a href=".*"'
>>>shlex.split(line)

我得到以下错误

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.8/shlex.py", line 311, in split
return list(lex)
File "/usr/lib/python3.8/shlex.py", line 300, in __next__
token = self.get_token()
File "/usr/lib/python3.8/shlex.py", line 109, in get_token
raw = self.read_token()
File "/usr/lib/python3.8/shlex.py", line 191, in read_token
raise ValueError("No closing quotation")
ValueError: No closing quotation

我基本上想要的是为用户提供-r选项来输入正则表达式
结果应该像这个

['./maryam', '-e', 'crawl_pages', '-d', 'domain.tld', '-r', 'a href=".*']

分配时

# XXX BROKEN
line = './maryam -e crawl_pages -d domain.tld -r "a href=".*"'

Python解析字符串并解析任何反斜杠转义,因此line的值中没有实际的反斜杠。您可以通过使用原始字符串来防止一层反斜杠解析;

line = r'./maryam -e crawl_pages -d domain.tld -r "a href=".*"'

但是,如果您的期望值真的应该包含一个字面反斜杠,那么您的输入就更根本错误了。

我想你只是有一个不正确的期望,但如果这真的是你想要的,那就试试

# XXX DUBIOUS
line = r'./maryam -e crawl_pages -d domain.tld -r "a href=\".*"'

然而,它看起来是这样的:

['./maryam', '-e', 'crawl_pages', '-d', 'domain.tld', '-r', 'a href=\".*']

(因为Python打印一个双反斜杠来显示一个字面反斜杠(。

相关内容

  • 没有找到相关文章

最新更新