在python中解析选项字符串的正则表达式

在python中解析选项字符串的正则表达式,python,regex,Python,Regex,我似乎无法创建正确的正则表达式来从字符串中提取正确的标记。用空格填充字符串的开头会生成正确的输出,但似乎不是最佳输出: >>> import re >>> s = '-edge_0triggered a-b | -level_Sensitive c-d | a-b-c' >>> re.findall(r'\W(-[\w_]+)',' '+s) ['-edge_0triggered', '-level_Sensitive'] # correct

我似乎无法创建正确的正则表达式来从字符串中提取正确的标记。用空格填充字符串的开头会生成正确的输出,但似乎不是最佳输出:

>>> import re
>>> s = '-edge_0triggered a-b | -level_Sensitive c-d | a-b-c'
>>> re.findall(r'\W(-[\w_]+)',' '+s)
['-edge_0triggered', '-level_Sensitive'] # correct output
下面是我尝试过的一些正则表达式,有没有人有一个不涉及更改原始字符串并生成正确输出的正则表达式建议

>>> re.findall(r'(-[\w_]+)',s)
['-edge_0triggered', '-b', '-level_Sensitive', '-d', '-b', '-c']
>>> re.findall(r'\W(-[\w_]+)',s)
['-level_Sensitive']

将第一个限定符更改为接受起始锚点或not字,而不是仅接受not字:

>>> re.findall(r'(?:^|\W)(-[\w_]+)', s)
['-edge_0triggered', '-level_Sensitive']
组开头的
?:
只是告诉正则表达式引擎不要为了结果而将其作为一个组处理

r'(?:^|\W)(-\w+)'

\w
已经包含下划线。

您可以使用负查找:

re.findall(r'(?<!\w)(-\w+)', s)

re.findall(r')(?太棒了,谢谢马克。你拿到支票了,尽管我会用Ignacio的解决方案,因为它比较短。@dlw:你似乎对支票的意思感到困惑。这并不意味着“这个答案是最快的正确答案”,而是意味着“这就是我要用的答案”.你应该查一下伊格纳西奥的答案.对不起,马克,支票是给伊格纳西奥的