我似乎无法创建正确的正则表达式来从我的字符串中提取正确的标记。用空格填充字符串的开头会生成正确的输出,但似乎不是最佳的:
>>> 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']
答案 0 :(得分:1)
将第一个限定符更改为接受开始锚点或非单词,而不是仅接受非单词:
>>> re.findall(r'(?:^|\W)(-[\w_]+)', s)
['-edge_0triggered', '-level_Sensitive']
组开头的?:
只是告诉正则表达式引擎不将其视为一组用于结果。
答案 1 :(得分:1)
r'(?:^|\W)(-\w+)'
\w
已包含下划线。
答案 2 :(得分:0)
你可以使用负面观察:
re.findall(r'(?<!\w)(-\w+)', s)
(?<!\w)
部分表示“只有在没有单词字符的情况下才匹配”。