Python 包含 RegEx 的 shlex 拆分选项
Python shlex split option that contains RegEx
假设我想发出这个命令
./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 打印双反斜杠以显示文字反斜杠)。
假设我想发出这个命令
./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 打印双反斜杠以显示文字反斜杠)。