регулярное выражение для разбора строки параметра в python - PullRequest
0 голосов
/ 11 июня 2010

Я не могу создать правильное регулярное выражение для извлечения правильных токенов из моей строки.Заполнение начала строки пробелом приводит к правильному выводу, но, кажется, не оптимальным:

>>> 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

Вот некоторые из регулярных выражений, которые я пробовал, есть ли у кого-нибудь предложение регулярного выражения, которое не 't включает изменение исходной строки и генерирует правильный вывод

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

Ответы [ 3 ]

1 голос
/ 11 июня 2010
r'(?:^|\W)(-\w+)'

\w уже включает в себя подчеркивание.

1 голос
/ 11 июня 2010

Измените первый квалификатор, чтобы принимать либо начальный якорь, либо не-слово, а не только не-слово:

>>> re.findall(r'(?:^|\W)(-[\w_]+)', s)
['-edge_0triggered', '-level_Sensitive']

?: в начале группы просто сообщает регулярное выражениедвигатель, чтобы не рассматривать это как группу для целей результатов.

0 голосов
/ 11 июня 2010

Вы можете использовать отрицательный взгляд:

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

часть (?<!\w) означает «совпадение, только если перед ним не стоит символ слова».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...