正则表达式保留方括号中的顺序

时间:2017-01-09 03:36:20

标签: python regex

问题的背景如下。我希望获取wget尝试下载的文件,但需要忽略可能出现或可能不出现的标志。 例如。 wget -qO http://google.com/myfile.sh。预期输出为:http://google.com/myfile.sh。对于这个例子,正则表达式:

r'wget\s-\w+\s([^\s]*)'

似乎可以解决问题。但是,没有标志时将无效。

为了让(可能缺席)标志起作用我尝试了:r'wget\s[-\w+\s]?([^\s]*)'我希望能说“你可以期待0或1个破折号后跟一些字符的实例”,但它似乎认为-\w+\s的顺序是可选的,至少是我对以下结果的解释:

import re
re.search(r'wget\s-\w+\s([^\s]*)','wget -qO http://google.com/myfile.sh').group(1)
>>> 'http://google.com/myfile.sh'
re.search(r'wget\s[-\w+\s]?([^\s]*)','wget -qO http://google.com/myfile.sh').group(1)
>>> 'q0'
re.search(r'wget\s[-\w+\s]*([^\s]*)','wget -qO http://google.com/myfile.sh').group(1)
>>> '://google.com/myfile.sh'

有人可以解释最后两个结果,并说明如何确保它匹配0个或更多标志吗?

1 个答案:

答案 0 :(得分:1)

尝试以下方法:

 wget\s*(?:-\w+)?\s*(.*)

https://regex101.com/r/aDWM3X/1以供参考

您的示例无法正常工作的原因是因为您使用的括号表示"以下任何字符或范围"同时也在\ w之后使用+(这并不意味着\ w中的一个或多个,它意味着寻找任何\ w,任何+ ....如果你使用一个组然后你可以使组可选吗?(零或1)或*如果它可以是零或无限